如何制作OpenCV_contrib face_module的Java JAR并合并至基础OpenCV模块
编译带opencv_contrib人脸模块的OpenCV Java版 + NetBeans配置步骤
一、前期准备
- 下载同版本的OpenCV源码和opencv_contrib源码(比如都用4.8.0),解压到同级目录,例:
- OpenCV源码:
D:\opencv-4.8.0 - opencv_contrib源码:
D:\opencv_contrib-4.8.0
- OpenCV源码:
- 安装CMake(版本≥3.18)、Visual Studio(带C++开发组件,比如VS2022)
- 安装JDK(版本≥1.8,注意位数和VS一致,比如都是64位),并配置好
JAVA_HOME环境变量
二、CMake配置生成VS工程
- 创建空的编译输出目录(不要和源码混放),例:
D:\opencv-build - 打开CMake GUI:
- 点击
Browse Source,选择OpenCV源码下的sources目录,例:D:\opencv-4.8.0\sources - 点击
Browse Build,选择刚才创建的D:\opencv-build - 点击
Configure,选择你的VS版本(如Visual Studio 17 2022),平台选x64,点Finish等待配置完成
- 点击
- 配置核心参数(在CMake搜索框输入关键词快速定位):
- 勾选
BUILD_JAVA(这是生成Java JAR的关键,别漏) - 找到
OPENCV_EXTRA_MODULES_PATH,填入opencv_contrib的modules目录路径,例:D:\opencv_contrib-4.8.0\modules - (可选)取消勾选不需要的模块来缩短编译时间,比如保留
opencv_core、opencv_imgproc、opencv_face等必要模块即可 - 再次点击
Configure,直到红色条目全部消失 - 点击
Generate,生成VS工程文件
- 勾选
三、Visual Studio编译生成JAR和动态库
- 打开
D:\opencv-build中的OpenCV.sln工程文件 - 顶部菜单栏选择
Release模式、x64平台(Debug模式可用于调试,但发布推荐Release) - 在解决方案资源管理器中,找到
INSTALL项目(在最下方),右键选择Build- 别直接编译整个解决方案,会浪费大量时间,
INSTALL项目会自动编译依赖模块并把产物整理到指定目录
- 别直接编译整个解决方案,会浪费大量时间,
- 等待编译完成(时间根据配置从10分钟到1小时不等)
- 编译完成后,产物位置:
- JAR文件:
D:\opencv-build\install\java\opencv-480.jar(版本号对应你下载的OpenCV版本) - 动态库(.dll):
D:\opencv-build\install\x64\vc17\bin(vc17对应VS2022,其他版本会有变化)
- JAR文件:
四、NetBeans项目配置
- 打开你的Java项目,右键点击项目 →
Properties - 配置依赖JAR:
- 选择
Libraries→Add JAR/Folder,找到刚才生成的opencv-480.jar添加到项目中
- 选择
- 配置动态库路径:
- 选择
Run→VM Options,输入:
替换成你实际的dll所在路径-Djava.library.path=D:\opencv-build\install\x64\vc17\bin
- 选择
- 测试验证:
写一段简单代码测试人脸模块是否可用,例:
运行项目,若控制台输出成功信息则配置完成import org.opencv.core.Core; import org.opencv.face.FaceRecognizer; import org.opencv.face.LBPHFaceRecognizer; public class FaceTest { public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); FaceRecognizer recognizer = LBPHFaceRecognizer.create(); System.out.println("人脸模块加载成功"); } }
常见坑点
- 版本必须严格匹配:OpenCV和opencv_contrib的版本号要完全一致,否则编译会报错
- 位数一致:JDK、VS编译平台(x64/x86)必须统一,不然会出现库加载失败
- 必须勾选
BUILD_JAVA:很多人漏了这个选项,导致最终没有生成JAR文件 - 编译
INSTALL项目:直接编译整个解决方案会编译大量无用模块,耗时极长
内容的提问来源于stack exchange,提问作者Pushkar
相关产品推荐
相关产品推荐

