在Spring Cloud in Java工程项目中,添加JavaCV的maven包,pom.xml配置项如下:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.8</version>
</dependency>
在maven更新后,这些Jar会自动下载且部署到工程项目中,然后写一个最简单JavaCV代码,示例如下:
public class TimerMain
{
static
{
//在使用OpenCV前必须加载Core.NATIVE_LIBRARY_NAME类,否则会报错
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args)
{
try
{
//读取当前路径下的图片
Mat src = Imgcodecs.imread("1.png");
Mat hsv = new Mat();
//图片转HSV
Imgproc.cvtColor(src, hsv,Imgproc.COLOR_BGR2HSV);
Mat hist = new Mat();
//直方图计算
Imgproc.calcHist(Stream.of(hsv).collect(Collectors.toList()),new MatOfInt(0),new Mat(),hist,new MatOfInt(255) ,new MatOfFloat(0,256));
//图片归一化
Core.normalize(hist, hist, 1, hist.rows() , Core.NORM_MINMAX, -1, new Mat() );
//直方图比较
double a = Imgproc.compareHist(hist,hist,Imgproc.CV_COMP_CORREL);
System.out.println("(越接近1越相识度越高)同一图片的比较结果:"+a);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
运行上述程序时候,会抛出下面错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path: [/Users/williamhong/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:2660)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:827)
at java.base/java.lang.System.loadLibrary(System.java:1871)
at com.vg.TimerMain.<clinit>(Main.java:25)
这个错误的关键是opencv_java460
库要配置到java.library.path
之中。下面讲讲如何安装这个OpenCV Java应用包,步骤如下:
一、下载OpenCV 4.6.0源码
https://github.com/opencv/opencv/archive/4.6.0.zip
在本地路径中,解压这个压缩包,示意如下:

二、配置环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export JAVA_AWT_INCLUDE_PATH=$JAVA_HOME
export JAVA_AWT_LIBRARY=$JAVA_HOME
export JAVA_INCLUDE_PATH=$JAVA_HOME/indclude
export JAVA_INCLUDE_PATH2=$JAVA_HOME/include/darwin
export JAVA_JVM_LIBRARY=$JAVA_HOME
请注意:JAVA_HOME设置为自己本地实际安装的JDK路径,且依次在Terminal终端执行上述配置。
三、cmake设置
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON ..
cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..
cmake -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF ..
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_EXAMPLES=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D BUILD_TIFF=ON ..
cmake -D BUILD_ZLIB=OFF ..
请注意依次在Terminal终端执行上述配置。
四、编译OpenCV
$ cd opencv-4.6.0
$ mkdir build
$ cd build
$ make -j8
请注意,这个过程要花费时间很长,直到100%编译完成,如下图:

五、编译Java Module
$ cd modules/java
$ make -j8
请注意直至编译100%完成,如下图:

五、配置libopencv_java460.dylib
在build/lib目录下找到库文件libopencv_java460.dylib,如下图:

把这个库文件复制到“Library/java/Extensions”目录下,如下图:

六、配置opencv-460.jar到工程项目中
在build/bin目录下找到库文件opencv-460.jar,如下图:

然后,复制这个Jar包到工程项目的Resources/lib,如下图:

最后,配置一下工程项目pom.xml,如下:
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv</artifactId>
<version>4.6.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/opencv-460.jar</systemPath>
</dependency>
上述操作完成之后,再次运行main,结果就正常啦。特别提醒一下,不要使用HomeBrew安装OpenCV版本,因为它默认不带Java模块,故没有相关的库和jar包。