工作上有时候需要通过java调用opencv批量处理图像或视频。
1.下载安装包
在官方网站下载opencv的程序包,在开发环境一般使用的是windows版的程序包。
https://opencv.org/releases/
注意:最新版本的用的开发语言是JAVA11版本以上,若还在使用JAVA8最好下载4.6.0及以下版本。
opencv安装包在github的下载链接比较慢,可以百度其他国内网站进行下载。
这里我使用的是opencv4.4.0版本。
2.引入到项目工程文件
解压缩后再opencv\build\java下有我们需要的jar包和dll文件。
打开IDEA的项目结构引入刚解压的opencv的jar包
接着,将opencv_java440.dll
的库文件加入到jar包中。
编写测试文件,可以看到opencv已经引入成功。
测试如下:
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
public class Test {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat eye = Mat.eye(3, 3, CvType.CV_8UC1);
System.out.println(eye.dump());
}
}
3.构建到maven仓库中
前面只是能在java中使用opencv了,但是若是需要打包成jar包,则需要构建maven包。
如图,在resouces文件夹下新建lib文件夹,编写批处理命令maven-init.cmd
将jar包记录到本地maven仓库,同时将opencv-440.jar
文件改名为opencv-4.4.0.jar
文件也放在此目录中。
maven-init.cmd文件
@echo off
chcp 65001
echo ****************************************
echo 安装SDK依赖包到本地maven仓库
echo ****************************************
call mvn install:install-file -DgroupId=org -DartifactId=opencv -Dversion=4.4.0 -Dpackaging=jar -Dfile=opencv-4.4.0.jar
pause
在pom.xml文件中引入maven依赖
<dependency>
<groupId>org</groupId>
<artifactId>opencv</artifactId>
<scope>compile</scope>
<version>4.4.0</version>
</dependency>
4.处理视频文件
当程序需要处理视频文件时,或者jar包时在生产环境运行时,有个点需要注意。
在jdk的jre/bin
目录需要加入一个dll文件,分别为opencv_videoio_ffmpeg440_64.dll的文件,否则程序运行会报错,找不到library路径。因为处理视频使用了ffmpeg的插件。
//打开视频流
VideoCapture capture = new VideoCapture();
try {
capture.open(filename);
if (!capture.isOpened()) {
System.out.println("无法打开视频流: " + filename);
}
} catch (Exception e) {
System.out.println("打开视频流时发生异常: " + e.getMessage());
e.printStackTrace();
}
没有ffmpeg的插件的话,是无法打开视频流的。报错如下:
[ERROR:0@0.286] global cap.cpp:166 cv::VideoCapture::open VIDEOIO(CV_IMAGES): raised OpenCV
exception: OpenCV(4.4.0) D:\opencv\modules\videoio\src\cap_images.cpp:267:error: (-215:Assertion failed) number < max_number in function ‘cv::icvExtractPattern’
这个坑我也是找遍全网,花了一天时间才解决的。