一、OpenCV是什么?
OpenCV,Open Source Computer Vision Library,开源计算机视觉库。是主流计算机视觉开发工具平台之一,集成了2000多计算机视觉相关算法,支持深度学习模型的部署和推理。目前支持Java、JavaScript、Python、C++、C#等多种语言,同时支持Windows、Linux、macOS等操作系统。
实现环境
- Windows 11
- Intellij IDEA 2024.1.2
- Jave version:Oracle OpenJDK 22.0.1
- Apache Maven 3.9.7
- OpenCV 4.10.0
配置过程
1.创建Java项目
2.项目结构
- lib/opencv:复制opencv中build/java目录中的所有文件至该路径。build目录包含编译、调试、发布所需要的各类动态库、静态库等。
- src/main/java:主目录。
3.添加OpenCV库
File→Project Structure…→Platform Settings→Global Libraries(OpenCV的相关JAR包根据自身环境进行编辑)
4.设置VM Option
VM Option的路径指向项目中lib/opencv/x64的路径位置,此处我使用的是绝对路径形式。
5.创建测试类:ReadImgTest
该类和Main主程序在同一名字空间。代码如下:
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
public class ReadImgTest {
static {
// 加载本地链接库
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("Welcome to OpenCV " + Core.VERSION);
}
public static void test() {
// 读取一张图片
Mat src = Imgcodecs.imread("C:\\Users\\Pictures\\tmp\\test.png",1);
/**
* 读取图片的两种方式:
* 1. Imgcodecs.imread(String filename, int flags)
* 2. Highgui.imread(String filename, int flags)
* 其中,flags表示读取图片的模式,0表示读取为灰度图,1表示读取为彩色图。
* HighGui:该模块是HighGUI图形用户界面模块,包含输入输出、视频捕获、图像及视频的编码解码、图形界面交互接口(按键/鼠标点击/滚轮动作等)等内容。
*/
// 显示图片
HighGui.imshow("test", src);
HighGui.waitKey(3000);
}
}
HighGui:该模块是HighGUI图形用户界面模块,包含输入输出、视频捕获、图像及视频的编码解码、图形界面交互接口(按键/鼠标点击/滚轮动作等)等内容。
6.测试
编辑Main主程序,调用测试类,代码如下:
public class Main {
public static void main(String[] args) {
ReadImgTest.test();
}
}
运行调试结果如下:
总结
- 安装OpenCV
- 前往OpenCV官网下载OpenCV-4.10.0Windows版。
- 遵循安装指南完成安装。
- 创建Java项目,选择正确的SDK。
- 配置项目设置
- 进入 File → Project Structure →Plateform Settings→Global Libraries进行配置。
- 添加OpenCV依赖库
- 将OpenCV的jar文件添加至Global Libraries.
- 在运行配置中添加VM选项,指定native库路径。
- 修改编译器设置。添加OpenCV包含的头文件路径。
- 编写测试代码。使用CV::Mat读取图像。
- 运行测试。检查OpenCV功能是否可以正常工作。
- 调试及优化。如遇问题可以使用调试功能进行断点调试。
后记及问题补充
1、如果你的项目无法正确引入opencv的相关资源包,可以在Modules中引入Global Libraries,如图所示:
2、如果运行时出现类似:Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java4100 in java.library.path: C:\Program……的错误提示。
出现这个问题的原因是java应用需要用到opencv本地类库下的.DLL文件。一般来说,java运行时加载本地libraries时,需要从PTAH环境变量中,或者根据java.library.path.system.property指定位置加载(取决于Java程序使用的时System.load()还是java.lang.System.loadLibrary())。任何一个原因没能找到,都会出现类似的报错异常。可以使用以下Java语句进行查询:
public class Main {
public static void main(String[] args) {
// 获取系统环境变量 java.library.path的值,该属性指定了系统库的搜索路径。
// 获取系统环境变量 java.library.path
String libraryPath = System.getProperty("java.library.path");
// 输出java.library.path的值,用于查看当前系统的库搜索路径。
System.out.println("java.library.path:" + libraryPath);
}
}
如果检查确认有相关的信息,说明VM配置正确
那么,可以设置Windows环境变量解决。在Windows环境变量中添加DLL路径,如图:
完成以上配置后,问题解决。