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) {//加載openCVPrintVersion.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 提示找不到