

OpenCV Java入门二 在Windows10系统上安装OpenCV
source link: https://blog.csdn.net/lifetragedy/article/details/123549602
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

OpenCV Java入门二 在Windows10系统上安装OpenCV
准备好痛苦了没有?
痛苦之后是欢乐。因为必竟大多人还是用的WINDOWS来开发的居多。因此如果OpenCV无法在Win10下安装,一样不能起到普及作用。
而Windows下的编译安装OpenCV也是最痛苦的一件事。原因就在于在编译安装OpenCV时很多Extra的模块是被“墙”掉了。
因此整个过程一会这个错一会那个错,开发机电脑也不太好,导致一次编译,30多分钟,然后报了一堆错网上查了半天解决了一个,又来一个。
如此周而复始,让绝大多数开发者放弃了OpenCV。
本篇就是要着重讲述OpenCV在Windows10下的编译全过程和全部坑的排错。
- 一台32GB开发机;
- I7 CPU;
- 必须为固态磁盘否则编译过程可以让你怀疑人生;
- 稳定的百兆宽带连接;
- Win10;
- 安装Visual Studio 14 2015 win64版或者更高也可以并安装时选择“Visual C++“,在此过程还会安装.netframework;
- 安装jdk1.8即可,并把JAVA_HOME\bin加入到环境变量path中去;
- 安装Ant1.9或以上,并把ANT_HOME\bin加入到环境变量path中去;
- 安装python3,并把python.exe所在的path,加入到环境变量path中去;
- 下载opencv3.4.3稳定版-本人提供了整理的包含全套脱机文件(被墙掉的文件)的安装包在正文中;
- 下载opencv3.4.3-contribute本人提供了整理的包含全套脱机文件(被墙掉的文件)的安装包在正文中;
- 下载cmake-gui(下载后直接双击即可运行不用安装);
截图-python3

截图-系统path环境变量


先了解opencv在windows下编译安装的逻辑过程
opencv在windows下任何版本的编译是如下过程的
- 使用cmake进行opencv的configure;
- 寻找ant;
- 寻找jdk;
- 寻找python;
- 加入opencv nonfree包;
- 加入opencv contrib模块;
- 开启opencv java编译项;
- 开启opencv xfeatures2d项;
- 使用windows10上安装的visual studio的编译器生成visual studio项目.sln;
- 使用visual studio打开由cmake gui生成visual studio项目;
- 使用ant编译打包opencv jar包;
- 使用visual studio的vc引擎编译->Install;
开始Configure OpenCV
千万不要去下载网上提供的已经编译好的这两个文件。如果你为了图个方便,网上去下载别人编译安装好的这两个文件

那么在学习过程中运行死机、运行报错、或者干脆一会header找不到一会什么.h文件找不到,不要怪我没有事先提醒。
OpenCV在编译时的安装目录的设置
opencv在编译时会需要很多第3方依赖包,这些额外包有这么大一陀,我给各位看一下。

每一个第3方安装包,都在墙外,你在编译安装时一个下载时被卡住、过几分钟后再Failed、再一个。。。。。。再一个。。。。。。这些包全部下载Failed后用了几十分钟,然后你直接会觉得有一种“生无可怜”的味道。
我是一个个自己看着编译报错时的log内容,一个个手动用百度云盘方式先下载后再按照了OpenCV编译安装时所需要的目录结构排列后,并且下载了OpenCV3.4.3的源码(不动任何东西)以及OpenCV3.4.3的contribute包。然后我把三个目录打成了一个包,做了一个脱机包给到大家,算是一种福利吧。
完整全套脱机包在此百度网盘内,请笑纳:
链接:https://pan.baidu.com/s/1mXOEfqykUT2TWk6OXtAEVA?pwd=ioti
提取码:ioti
--来自百度网盘超级会员V6的分享
下载后并解压是这样的一个文件目录结构内容把它放到一个叫opencvinstall的目录内。
3rdparty为opencv编译安装时必备,这里面我已经把我所有一个个幸苦下载好的文件按照opencv安装时的需要摆放好了。
随后我们单建一个文件夹叫opencvbuild。用来存cmake编译出来的opencv的编译输出的文件夹
届此,即完成了目录设置的准备了。
使用cmake-gui编译

运行起来后是这样的界面

- where is the souce code:指向D:/opencvbuild/opencv3.4.3.master即源码所在目录节点
- where to build the binaries:指向编译生成后所在的目录,在些我们用的是D:/opencvbuild,这是一个空目录,你可以任意指定。
把我网盘里下载下来的3个文件夹中的“3rdparty”里的所有的内容

拷贝到opencv3.4.3.master即源码包下的.cache里,并按照提示覆盖掉里面3rdparty目录内的所有内容。


然后点一下这个界面中的【Configure】按钮。

然后cmake-gui会提示你选择visual c的编译器,你此时应该事先已经装好了visual studio 14 2015包含visual c++了,请选择visual studio 14 2015。

然后点【Finish】后你会得到一堆红色的列表,没有关系。跟着我的步骤一步步走,不会有问题的。
在红色的列表中进行相应的选择和填充
确保ant被opencv正确找到
否则就要自己手工指定目录

OPENCV_ENABLE_NONFREE的选择
把OPENCV_ENABLE_NONFREE打勾

OPENCV_EXTRA_MODULES_PATH必须被指定否则不可以用人脸识别
记得这边指定的可是/opencvinstall/opencv_contrib-3.4.3/modules目录,很多人指定到了opencv_contrib-3.4.3这一层,会导致点【configure】按钮时出一个.h文件找不到的错的。
确保python的Executable和Include Dir可以被系统找到
否则就手工指定。

然后再次点击【Configure】

然后看到此处的两个Java都要Success。
此时我们来看opencvbuild目录内,出现了这么多东西,好家伙。

此时,我们在进入下一步前需要做一件事,否则你一会会感觉要疯了。
那就是在之前OpenCV Java入门一 在MAC系统上安装OpenCV里,我说过:opencv会使用最新的javac compiler编译打包opencv for java。
在mac里它打出的jar包我们需要使用jdk17来运行,同时兼顾装有jdk1.8来运行最新版2021-12版的eclipse。
- 使用eclipse 2021-12+jdk1.8启动eclipse;
- opencv工程使用jd17作jre,同时compile version选17就可以在eclipse内进行开发opencv的项目了。
很可惜,windows下的eclipse 2021-12的compile version只支持到 jdk16,这和mac是有极大的区别的,它比mac上的东西慢了半拍。
因此,如果在windows里编译出来的opencv的jar包也是jdk17编译成的,你的eclipse就算是最新的也会在运行时报一个非常恶心的错“need class version 62, but it support to 61”。
所以,一开始我们就要在这个jar包被编译前就指定jdk编译版本把这个jar包用jdk1.8编译出来。这样我们在windows里就可以使用jdk1.8以及eclipse早期版(只要支持jdk1.8的)可以使用opencv jar了。
指定编译出的opencv jar包的编译器为jdk1.8
在opencvbuild即cmake-gui输出的目录中找到如下的这个文件

打开它,然后把这一行加上一个target="1.8":

改完后的build.xml全文如下范例

在cmake-gui界面点击[Generate]按钮

并得到成功的输出。
然后再点击【Open Project】按钮
此时,visual studio就被打开了。当全部的项目装载完后先把Debug改成Release,然后点击菜单里的“生成”->“生成解决方案”。

全部生成成功在我的台式机上大概也就用了4分钟。

然后在右边的这块树型project explorer界面中
点击【INSTALL】,按鼠标右键,选【仅用于项目】

过一会全部编译好的opencv就放置在了opencvbuild\install目录下了。
java用的两个文件生成在此opencvbuild\install\java
在Windows下使用Eclipse创建OpenCV工程
在Native library location处,点击【edit】按钮

把这个路径定位到D:\opencvbuild\install\java目录,这个目录里有opencv-343.jar和opencv_java343.dll文件。
在下面的classpath里点击右边的【Add External JARs】按钮。把它定位到D:\opencvbuild\install\java\opencv-343.jar文件。
在windows10的控制面板的系统设置里,在系统变量的Path里加入如下内容:

opencvbuild的\install\x64\vc14\bin
届此,OpenCV Java工程的环境已经全部搭建完毕。
OpenCV入门样例
我们来读入一张带有人脸的图片,然后在人脸上把他的眼晴部分给标识出来。
OpenCVUtil.java

ImageViewer.java
这是一个JFrame,用于显示OpenCV的Mat格式图像用的通用类,后面好几个例子都会用到这个通用显示图像类

DetectEye.java
这个类就是用来探测人眼的类了。
它作这么几件事:
- 读入一个jpg图片;
- 调用opencv内置检测器中的眼部检测器,这些检测器一般位于:opencv编译目录如“opencvbuild\install\etc”目录内;
- 使用检测器把人眼部位识别出来;
- 在识别的位置汇制一个矩形;
- 然后使用ImageViewer来显示这张图片;

运行后效果如下

Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK