javacv踩坑记录

前一阵学习opencv,发现在做人脸识别的时候遇到一些类库不存在的情况,查找后发现是由于拓展包没有安装完全(仅安装了基础版)。由于网络的问题(初步猜测),始终无法安装好拓展包。
于是另辟蹊径,想起来之前看到过的javacv。


JavaCV可以认为是OpenCV的Java版,其本质上是一个Java Interface,是一个联结Java与OpenCV的桥梁,所以它本质上是依赖OpenCV的。目前,关于这东西能查到的文档和资料实在是太少了,这个过程中着实踩了不少坑,记录一下以便帮助以后的人。

1、不需要本地安装

从JavaCV 0.8版本开始,OpenCV被完整地集成进了JavaCV的依赖中,也就是说从这个版本以后不需要在环境中配置任何关于OpenCV的东西,包括什么加载dll,配置环境变量,加载jar什么的,完全不需要!!! 我发现网上搜到的相当多的博客都说什么加载dll,都是没用的,新版本完全不需要。不要在错误的方向上一再尝试了。

2、精简引用jar包体积

我本地项目是maven,以下是我的配置

	<properties>
        <javacv.version>1.5.8</javacv.version>
        <javacv.opencv.version>4.6.0-1.5.8</javacv.opencv.version>
        <javacv.ffmpeg.version>5.1.2-1.5.8</javacv.ffmpeg.version>
        <javacv.openblas.version>0.3.21-1.5.8</javacv.openblas.version>
        <javacpp.platform.android-arm>android-arm</javacpp.platform.android-arm>
        <javacpp.platform.android-arm64>android-arm64</javacpp.platform.android-arm64>
        <javacpp.platform.android-x86>android-x86</javacpp.platform.android-x86>
        <javacpp.platform.android-x86_64>android-x86_64</javacpp.platform.android-x86_64>
        <javacpp.platform.ios-arm>ios-arm</javacpp.platform.ios-arm>
        <javacpp.platform.ios-arm64>ios-arm64</javacpp.platform.ios-arm64>
        <javacpp.platform.ios-x86>ios-x86</javacpp.platform.ios-x86>
        <javacpp.platform.ios-x86_64>ios-x86_64</javacpp.platform.ios-x86_64>
        <javacpp.platform.macosx-x86_64>macosx-x86_64</javacpp.platform.macosx-x86_64>
        <javacpp.platform.macosx-arm64>macosx-arm64</javacpp.platform.macosx-arm64>
        <javacpp.platform.linux-armhf>linux-armhf</javacpp.platform.linux-armhf>
        <javacpp.platform.linux-arm64>linux-arm64</javacpp.platform.linux-arm64>
        <javacpp.platform.linux-ppc64le>linux-ppc64le</javacpp.platform.linux-ppc64le>
        <javacpp.platform.linux-x86>linux-x86</javacpp.platform.linux-x86>
        <javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64>
        <javacpp.platform.windows-x86>windows-x86</javacpp.platform.windows-x86>
        <javacpp.platform.windows-x86_64>windows-x86_64</javacpp.platform.windows-x86_64>
    </properties>
    
    	<dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
            <version>${javacv.version}</version>
            <classifier>${javacpp.platform.macosx-arm64}</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>openblas</artifactId>
            <version>${javacv.openblas.version}</version>
            <classifier>${javacpp.platform.macosx-arm64}</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>opencv</artifactId>
            <version>${javacv.opencv.version}</version>
            <classifier>${javacpp.platform.macosx-arm64}</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>${javacv.ffmpeg.version}</version>
            <classifier>${javacpp.platform.macosx-arm64}</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>${javacv.version}</version>
        </dependency>

3、mac设备M1芯片,不支持imshow(”“, mat)函

这个问题困扰了我整整一天时间,最后看了下官网的问题说明,才发现mac环境不支持。
报错信息如下:

Exception in thread "main" java.lang.RuntimeException: Unknown exception.at org.bytedeco.opencv.global.opencv highqui.imshow(Native Method.at Smoother.smooth(Main.kt:13)
at Mainkt.main(Main.kt:19)
at Mainkt.main(Main.kt)

在这里插入图片描述改进后的写法如下所示:

CanvasFrame canvas = new CanvasFrame("美颜");//新建一个预览窗口
Image imageUp = ImageIO.read(new FileInputStream(new File("/Users/matt/Pictures/girl-UP.png")));
canvas.showImage(imageUp);
canvas.waitKey(0);
System.exit(0);

4、官方资料

#github
https://github.com/bytedeco/javacv

#官网地址
http://bytedeco.org
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值