工作上有时候需要通过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’

这个坑我也是找遍全网,花了一天时间才解决的。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部