Window OpenCV下载地址
https://opencv.org/releases/
OpenCV源码下载
https://github.com/opencv/opencv/tree/4.9.0
https://github.com/opencv/opencv_contrib/tree/4.9.0
OpenCV依赖
brew install libjpeg libpng libtiff cmake3 ant freetype
构建open CV
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
-DWITH_IPP=OFF \
-DWITH_TBB=OFF \
-DWITH_OPENCL=OFF \
-DENABLE_NEON=OFF \
-DCPU_BASELINE="" \
-DCPU_DISPATCH="" \
-DBUILD_opencv_dnn=OFF \
-DBUILD_JAVA=ON \
-DPNG_ARM_NEON_OPT=0 \
-DBUILD_opencv_imgcodecs=ON \
-DBUILD_opencv_ml=OFF \
-DBUILD_LIST="core;java" \
-DCV_DISABLE_OPTIMIZATION=ON \
-DBUILD_opencv_python=OFF \
-DOPENCV_EXTRA_MODULES_PATH=/Users/youshang/Downloads/opencv_contrib-4.9.0/modules \
-DJAVA_AWT_INCLUDE_PATH=$JAVA_HOME/include \
-DJAVA_AWT_LIB=$JAVA_HOME/lib/libjawt.dylib \
-DJAVA_INCLUDE_PATH=$JAVA_HOME/include \
-DJAVA_INCLUDE_PATH2=$JAVA_HOME/include/darwin \
-DJAVA_JVM_LIBRARY=$JAVA_HOME/lib/server/libjvm.dylib \
..
- 注意
-DCMAKE_OSX_ARCHITECTURES
、-DBUILD_LIST
参数,仅仅是为了编译成功,里面缺了很多模块 - 编译出来只能使用本地库,jar功能不全选择maven仓库下载替换
构建完成标志:
编译opencv
ninja
编译完成标志:
- 编译opencv为了获取 libopencv_java490文件
- 文件存放路径为:opencv-4.9.0/build/lib (不要使用构建成功的jar包,jar包单独下载)
libopencv_java490.dylib
Mac依赖的 OpenCV本地库opencv_java490.dll
window依赖的OpenCV本地库
项目中集成OpenCV
配置libopencv_java490文件
- 将
libopencv_java490
文件丢到/usr/local/lib
目录下,在项目中加载OpenCV本地库
static {
// 加载 OpenCV 本地库
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
idea添加
VM options
引用-Djava.library.path=/usr/local/lib
配置openCV jar包
<dependency>
<groupId>com</groupId>
<artifactId>opencv</artifactId>
<version>4.9.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/opencv-4.9.0-0.jar</systemPath>
</dependency>
异常信息:
no opencv_java490
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java490 in java.library.path: [/Users/youshang/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2678)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
at java.base/java.lang.System.loadLibrary(System.java:1890)
at com.rangertech.osc.video.utils.CameraCalibrationJava.<clinit>(CameraCalibrationJava.java:26)
- 原因:未配置
libopencv_java490
所导致的 - 解决方法:将
libopencv_java490
配置到-Djava.library.path=
读取的位置即可
long org.opencv.imgcodecs.Imgcodecs.imread_1(java.lang.String)
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'long org.opencv.imgcodecs.Imgcodecs.imread_1(java.lang.String)'
at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method)
at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:330)
at com.rangertech.osc.video.utils.CameraCalibrationJava.calibration(CameraCalibrationJava.java:83)
at com.rangertech.osc.video.utils.CameraCalibrationJava.main(CameraCalibrationJava.java:192)
原因:有可能是
jdk
架构、libopencv_java490
版本、libopencv_java490
编译架构,不一致导致的解决方法:单独下载opencv jar包
下载地址:
https://repo1.maven.org/maven2/org/openpnp/opencv/4.9.0-0/
在调用时主动加载OpenCV:
public static void main(String[] args) { //加载openCV PrintVersion.main(args); CameraCalibrationDTO dto = new CameraCalibrationDTO(); dto.setChessboardHeight(6); dto.setChessboardWidth(9); dto.setSquareSize(24.0); dto.setImagePaths(Lists.newArrayList("/Users/youshang/Downloads /Checkerboard.png")); CameraCalibrationJava.calibration(dto); }
zsh: command not found:
CMake Error: The source directory "/Users/youshang/Downloads/opencv-4.9.0/build/ " does not exist.
Specify --help for usage, or press the help button on the CMake GUI.
zsh: command not found: -DBUILD_JAVA=ON
- 原因:
- CMake 提示找不到
…/opencv-4.9.0/build/
目录,原因是路径末尾多了一个空格; - 终端报 “zsh: command not found: -DBUILD_JAVA=ON” 往往是因为换行符
\
后面不小心留了空格,导致 shell 没把它当作续行符处理,接下来的参数被当成了新的命令。
- CMake 提示找不到