m3芯片 mac springboot使用opencv

96 阅读1分钟

引入opencv依赖

<dependency>
    <groupId>org.openpnp</groupId>
    <artifactId>opencv</artifactId>
    <version>4.9.0-0</version>
</dependency>

依赖查询:mvnrepository.com/artifact/or…

mac安装opencv

brew install opencv

代码中使用

public class OpencvUtils {

    static {
        nu.pattern.OpenCV.loadLocally();
    }
    
    
    public static void main(String[] args) {
        // TODO:这里直接使用opencv相关功能即可
    }
}

通过图片的cnd链接,得到Mat类型

/**
 * 通过图片链接得到bufferedImage
 * @param imageUrl 图片cdn链接
 * @return BufferedImage
 */
private static BufferedImage getBufferedByUrl(String imageUrl) {
    Request request = new Request.Builder()
            .header("keep-alive", "true")
            .url(imageUrl)
            .get()
            .build();
    // client是okhttp,自己封装即可
    try (Response response = client.newCall(request).execute()) {
        if (!response.isSuccessful()) {
            throw new RuntimeException("请求失败,HTTP 状态码: " + response.code());
        }
        try (InputStream inputStream = response.body().byteStream()) {
            return ImageIO.read(inputStream);
        } catch (IOException e) {
            log.error("获取图片流失败", e);
            throw new RuntimeException(e);
        }
    } catch (IOException e) {
        log.error("下载图片失败", e);
        throw new RuntimeException(e);
    }
}

/**
 * bufferedImage转Mat
 * @param bufferedImage 图片
 * @return Mat
 */
private static Mat bufferedImageToMat(BufferedImage bufferedImage) {
    int type = bufferedImage.getType();
    if (type != BufferedImage.TYPE_3BYTE_BGR) {
        BufferedImage convertedImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(),
                BufferedImage.TYPE_3BYTE_BGR);
        convertedImage.getGraphics().drawImage(bufferedImage, 0, 0, null);
        bufferedImage = convertedImage;
    }
    byte[] pixels = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData();
    Mat mat = new Mat(bufferedImage.getHeight(), bufferedImage.getWidth(), CvType.CV_8UC3);
    mat.put(0, 0, pixels);
    return mat;
}