1 Star 0 Fork 0

奔跑小羊/learn-opencv

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

OpenCV学习项目

MacOS安装OpenCV

https://opencv-java-tutorials.readthedocs.io/en/latest/01-installing-opencv-for-java.html

主要是利用Homebrew安装

安装完成后OpenCV的jar包在 /usr/local/Cellar/opencv/4.7.0_1/share/java/opencv4

MacOS编译OpenCV

参考1

参考2

利用Homebrew安装的优势是简单轻松,无需考虑各种依赖,但劣势是不能自定义代码,例如有时候改动一点点源码以适应一些自定义场景,Homebrew安装方式就不能应对了。以下是手动编译OpenCV的JNI包的过程。

Xcode用MacOS系统自带的App Store下载,下载好之后记得打开一次,需要安装Xcode的核心依赖,不安装的话会找不到CXX编译器,其他xcodebuild相关的配置命令可以百度搜索。

官方源码下载地址: https://opencv.org/releases/

cmake下载 https://cmake.org/download/

cmake需要安装到环境变量中,打开cmake的GUI,菜单栏Tools→How to Install For Command Line Use,里面会有一键安装cmake的方法

OpenCV源码解压,然后创建文件夹存放构建生成物

mkdir XXX/opencv-4.X.0/build/

这里简单介绍一下构建OpenCV的过程:源码→cmake生成物→make生成物→make install最终生成物

首先添加一下临时的环境变量:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-19.0.1.jdk/Contents/Home/

在shell中执行可以插入JAVA_HOME这个临时变量,后面的cmake需要此变量以使得JAVA能被识别到。

然后进入build文件夹里面,使用以下命令配置生成cmake生成物

cmake -DCMAKE_SYSTEM_PROCESSOR=x86_64 -D CMAKE_OSX_ARCHITECTURES=x86_64 -D OPENCV_JAVA_TARGET_VERSION=19 -D JAVA_INCLUDE_PATH=/Library/Java/JavaVirtualMachines/jdk-19.0.1.jdk/Contents/Home/include -D BUILD_opencv_java=ON -D WITH_FFMPEG=ON -D WITH_IPP=OFF -D JAVA_AWT_LIBRARY=/Library/Java/JavaVirtualMachines/jdk-19.0.1.jdk/Contents/Home/lib/libawt.dylib -D BUILD_opencv_python3=OFF -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 -D BUILD_ZLIB=OFF -D CMAKE_INSTALL_PREFIX=./aa ..

参数解释,CMAKE_SYSTEM_PROCESSOR、CMAKE_OSX_ARCHITECTURES是硬件和系统架构,OPENCV_JAVA_TARGET_VERSION我这里用了JDK19,BUILD_opencv_java这个必须开着,WITH_IPP这个OFF貌似没什么问题,如果是ON的话还需要下载github上的文件(国内基本是断网的),BUILD_opencv_python3这个我用不上python就先不构建了,BUILD_ZLIB用OFF是因为我之前用Homebrew安装过zlib,已经下载过一次,但版本和本次构建的版本是不同的,因此会报错(详见这里),关掉不构建就可以了,因为zlib虽然版本不同,但是最终生成动态库的时候是兼容的。最后一个CMAKE_INSTALL_PREFIX是make install生成物存放的位置我就先放到aa文件夹了。

cmake命令的参数解释就是以上内容,最后的..表示cmake的源码位置在当前build目录的上层。

如果最后显示Configure done的字样就算cmake成功了,接下去轮到make。

make -j8

按JAVA的JDK19为目标环境进行预make,这里等待比较长时间的编译,机器CPU使用率也较高,各种连接。

最后 make install 一下,就可以生成动态链接库dylib和JNI接口的jar包了,位置在 XXX/opencv-4.X.0/build/aa/share/java/opencv4/opencv-480.jarXXX/opencv-4.X.0/build/aa/share/java/opencv4/libopencv_java480.dylib

附打包opencv_contrib的方法

参考3

必须使用最新的opencv代码和opencv_contrib的代码(都使用master分支)

https://github.com/opencv/opencv/tree/master

https://github.com/opencv/opencv_contrib/tree/master

之后创建build文件夹和构建结果文件夹(例如aa)

mkdir XXX/opencv-4XX/build/

mkdir XXX/opencv-4XX/build/aa/

之后设定JAVA环境

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-19.0.1.jdk/Contents/Home/

(JAVA1.8的awt路径在/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/jre/lib/libawt.dylib)

进入opencv-4XX/build/文件夹,执行configure命令

cmake -DCMAKE_SYSTEM_PROCESSOR=x86_64 -D CMAKE_OSX_ARCHITECTURES=x86_64 -D OPENCV_JAVA_TARGET_VERSION=19 -D JAVA_INCLUDE_PATH=/Library/Java/JavaVirtualMachines/jdk-19.0.1.jdk/Contents/Home/include -D BUILD_opencv_java=ON -D WITH_FFMPEG=ON -D WITH_IPP=OFF -D JAVA_AWT_LIBRARY=/Library/Java/JavaVirtualMachines/jdk-19.0.1.jdk/Contents/Home/lib/libawt.dylib -D BUILD_opencv_python3=OFF -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 -D BUILD_ZLIB=OFF -D OPENCV_EXTRA_MODULES_PATH=/Users/kwok/Downloads/opencv_contrib/modules -D CMAKE_INSTALL_PREFIX=./aa ..

OPENCV_EXTRA_MODULES_PATH选项就是指向opencv_contrib的modules文件夹

configure成功后执行

make -j8

生成install前的构建产物 。最后install产生jar包合dylib库

make install

附JAVA1.8的编译命令

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home

cmake -DCMAKE_SYSTEM_PROCESSOR=x86_64 -D CMAKE_OSX_ARCHITECTURES=x86_64 -D OPENCV_JAVA_TARGET_VERSION=8 -D JAVA_INCLUDE_PATH=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/include -D JAVA_AWT_LIBRARY=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/jre/lib/libawt.dylib -D BUILD_opencv_java=ON -D WITH_FFMPEG=ON -D WITH_IPP=OFF -D BUILD_opencv_python3=OFF -D BUILD_ZLIB=OFF -D OPENCV_EXTRA_MODULES_PATH=/Users/kwok/Downloads/opencv_contrib-4.8.1/modules -D CMAKE_INSTALL_PREFIX=./aa ..

make -j8

make install

附Linux上编译OpenCV的过程

去cmake官网下载最新的cmake源码,编译安装cmake

https://cmake.org/files/

./configure --prefix=/usr/local

make -j8

make install

Linux下载JDK1.8

https://www.oracle.com/java/technologies/downloads/#java8

Mac scp 命令上传文件,scp命令,然后密码验证,看上传进度条

scp -r ~/Downloads/opencv_contrib-4.8.1.zip root@192.168.2.76:/root/guojunjie

需要JDK、opencv、opencv_contrib,用tar(-zxvf)、unzip等解压

Linux上安装必须的环境

yum -y install gcc gcc-c++ openssl openssl-devel ant

配置OpenCV的编译变量

/usr/local/bin/cmake -D CMAKE_BUILD_TYPE=RELEASE -D OPENCV_EXTRA_MODULES_PATH=/root/guojunjie/opencv_contrib-4.8.1/modules -D CMAKE_INSTALL_PREFIX=./aa -D CMAKE_SYSTEM_PROCESSOR=x86_64 -D OPENCV_GENERATE_PKGCONFIG=ON -D ENABLE_CXX11=ON -D OPENCV_JAVA_TARGET_VERSION=8 -D JAVA_INCLUDE_PATH=/root/guojunjie/jdk1.8.0_401/include -D BUILD_opencv_java=ON -D WITH_IPP=OFF -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF -D BUILD_opencv_python3=OFF -D BUILD_ZLIB=OFF ..

编译

make -j8

make install

运行第一个程序时所用配置

由于程序默认有几个读取dylib的地方(OpenCV的JAVA接口其实是一堆JNI接口,底层实现在dylib里面)(如果不知道这些地方,只加载jar时系统会报错并提示那几个地方)

我挑了其中一个 /Library/Java/Extensions

首先将jar文件和dylib(相当于windows的dll库)文件拷贝到 /Library/Java/Extensions 文件夹下

(此处可以通过运行时的VM变量指定一个系统中的JAVA第三方库的位置,例如-Djava.library.path=/Library/Java/JavaVirtualMachines/jdk-19.0.1.jdk/Contents/Home/bin)

jar文件最好再放到项目的/lib文件夹下,加载比较方便(需要在IDEA的"项目结构"功能中加载到全局库中)。本项目通过gitignore忽略了jar文件的跟踪,OpenCV的库需自行打包后再放到对应位置。

然后再重新执行程序就可以运行了。第一次运行的时候加载dylib会比较慢,差不多用了一分钟,后面都是一两秒就加载完比较快。

引入JavaFX制作图形化界面

在《Learning OpenCV 3》这本书中,所有代码都是C++的,C++版本的OpenCV接口可以使用很多原生的HighGui功能,但是JAVA的接口就不行了,有很多诸如createTrackBar这种接口都没有,那图形化界面就只能通过别的库去实现。由于之前了解过JAVA目前最好的GUI库是JavaFX(其实也不咋地,毕竟极少开发者用JavaFX开发GUI),所以我选择用JavaFX实现那些书中需要图形化的实践内容。

要引入JavaFX很简单,依赖只需要引入javafx-controls、javafx-graphics、javafx-fxml、javafx-base即可,其他的配置详情可以看pom.xml。

一些需要注意的地方

引入JavaFX后,JDK需要用19的,要正常运行还需要编写module-info.java文件,否则会报找不到模块的错误。在项目的路径根目录(例如我这个项目设置dd.lo作为包的根目录)下面创建此文件,文件内容参考项目。IDEA的好处是有时候可以自动提示并按照你的需要自动添加模块。

关于人脸识别

例子中使用到的HAAR方法检测人脸需要加载预训练模型的XML文件,下载位置在

https://github.com/opencv/opencv/tree/3.4/data/haarcascades

目前测试了haar的alt效果基本达到要求

人脸识别的JAVA代码例子

https://docs.opencv.org/3.4/db/d28/tutorial_cascade_classifier.html

其他参考文章

https://blog.csdn.net/bllxk/article/details/80828465

关于人脸相似度计算

几种FaceRecognizer的使用

https://blog.csdn.net/weixin_61961691/article/details/132678185

关于人脸识别的一个样例做法

https://blog.csdn.net/lifetragedy/article/details/127133541

关于faceRecognizer的predict结果的confidence数值,解释是confidence越小越好,所以有些评论说叫loss更好

https://stackoverflow.com/questions/39010477/confidence-in-opencv-facerecognizer-predict-method-output

图片特征匹配

https://blog.51cto.com/u_16213704/7542891

PDF内容提取

https://pdfbox.apache.org/

https://blog.csdn.net/weixin_38361347/article/details/89643568

OpenCV的JavaDoc文档

https://docs.opencv.org/4.8.0/javadoc/index.html

空文件

简介

在《Learning OpenCV 3》这本书的过程中,书中的代码是C++的,笔者在实践过程中使用的是JAVA开发,本项旨在目收集笔者在学习过程中用JAVA代码实现的书中案例。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/alwayslearning/learn-opencv.git
git@gitee.com:alwayslearning/learn-opencv.git
alwayslearning
learn-opencv
learn-opencv
main

搜索帮助