当前位置: 首页 > news >正文

java调用opencv的流程

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

在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’

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


http://www.mrgr.cn/news/14986.html

相关文章:

  • 基于SpringBoot+Vue+MySQL的图书管理系统
  • 如何从头开始编写一个简单的 RPC 协议(手写 Dubbo 的自定义协议)
  • 【数模修炼之旅】10 遗传算法 深度解析(教程+代码)
  • 【PostgreSQL教程】PostgreSQL 高级篇之 视图
  • 【Java EE】JVM
  • OpenHarmony 实战开发——应用HAP包签名
  • 光学涡旋Talbot阵列照明器的matlab模拟与仿真
  • 【香橙派系列教程】(二十) 系统移植、交叉编译工具链—OrangePi Zero2 SDK说明
  • 100Kg大载重6轴共桨多旋翼无人机技术详解
  • 探索AWS EC2:提升企业云计算能力的理想选择
  • 【hot100篇-python刷题记录】【杨辉三角】
  • html table tbody deleteRow有残留?
  • 酒店预约小程序搭建,让酒店更加智能化
  • IDS、IPS和防火墙的区别是什么
  • 在Unity中使用C#进行Xml序列化时保留特定小数位的方法参考
  • Hive/Spark小文件解决方案(企业级实战)–参数和SQL优化
  • Spark2.x:通过 JDBC 连接数据库(DataFrame)
  • 设计模式 11 享元模式
  • mysql基础知识
  • 音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息