Cmake 配置Opencv以及拓展库(4.1.0版本)
用cmake配置opencv有时候真的要天时地利人和,我用了两天的时间,查阅了至少十篇博客才成功编译出来,之所以不放弃或者说不用别人编译好的lib和dll文件,主要是因为作为学习计算机的学生,使用cmake算是一项基本的本领。
这篇文章和网上的其他博文会不太一样,主要是根据两天的配置所出现的错误进行讲解,具有很强的真实性和可行性,希望后面的人不要再踩这些坑。
准备工作
- cmake 版本3.13.2
- opencv-4.1.0
- opencv-contrib-4.1.0
- 科学上网工具
- python36_d.lib
1. cmake 版本3.13.2
官网好像最低是3.15 其实是可以直接用的,不用特别在意版本问题。
2. opencv-4.1.0 opencv
opencv官网下载的速度特别慢。这里给出百度云的下载链接。 Opencv各版本
3. opencv-contrib-4.1.0
网上下载更慢,这里给出网盘链接 opencv_contrib 。
4. 科学上网工具
cmake在进行Configure的时候会下载很多文件,有的文件需要翻墙,所以一定要又这个工具,不然编译肯定会报错。印象中有boostdesc_bgm.i等文件需要翻墙
5. python36_d.lib
这个库在安装python的时候会有选项,但是当时大家都忽略了,所以要这个文件,只能重新下载一次了。网上有的说将python36.lib改个名字就可以,但是评论中有很多说行不通,所以我觉得不如直接卸载再重新下载一下即可。
只要下载好就可以了,cmake会自动搜索路径。
cmake编译
- 第一行是opencv/sources的路径。
- 第二行是保存的路径,随意选。这里的文件夹命名为CMake_opencv4.0_VS2017_X64
- 点击第一次Configure 会出现选择版本界面。
- 对于3.13版本 选择VS2015 Win64 对于3.16版本,选择VS2015 在下面一行输入x64 点击finish 进行configure。
- 当显示Configure done 会出现红色的界面
6. 找到OPENCV_EXTRA_MODULES_PATH,后面添加路径D:\opencv3\source\ opencv_contrib\modules , 精确到\modules 。勾选上面的OPENCV_ENABLE_NONFREE。
并且将WITH_MSMF和WITH_MSMFDXVA两个选项去掉(很多人可能不理解,这是在VS编译工程的时候会”出现videoio.lib,highgui.lib找不到“错误,我百度了很久才发现这个解决方案,如果不放心可以先不勾掉,等编译报错了,再重新cmake一遍。)
7. 在上图中,找到PYTHON3_LIBRARY 。 上图是错误的 ,我们需要的是 python36_d.lib。 只要它在文件里,cmake就会找到它,不需要我们自己去设置。另外,如果电脑有两个python版本,请注意一下python的路径。
8. 上面 6步骤做好以后,点击Configure,当出现Configure done,还是红色的界面。不要担心,再点击Configure 一次,红色界面就全部消失了。
9. 点击Generate ,当出现Generate done,旁边的Open Project便会显示出来。
Visual Studio编译
- 点击Open Project或者在文件夹找到OpenCV.sln。
2. 在Debug模式下,选择x64,然后就是”重新生成解决方案“。
我遇到的编译的错误:
- 无法打开 python36_d.lib错误
这个错误其实已经解决了,就是按照上面的步骤即可。不要想着重命名或者网上的修改什么文件的注释,重新下载python岂不是最保险吗?
2. videoio.lib,highgui.lib找不到
上面的步骤里已经讲过了。
其他错误没有遇见过了,我主要是卡在了第二个错误很长时间。
继续编译
3. 成功编译完,我大概有140多个成功的数量,其实项目总数大概在150多个。具体数目记不住了。
4. 解决方案资源管理器—>CMakeTargets—>INSTALL—>仅用于项目—>仅生成INSTALL
5. 这个编译没有什么问题,成功1个或2个。
至此,Debug编译全部完成。请将文件夹CMake_opencv4.0_VS2017_X64里面除了 install 文件夹以外,其他文件全部删掉吧。
环境配置
1. 进入环境变量,在系统变量中找到Path,输入xxx/CMake_opencv4.0_VS2017_X64/install/x64/vc15/bin 就是在install文件夹里面找到就行了。
2. 新建VS项目, 先将上面Debug的X86改成X64,然后找到属性管理器,界面上找不到的在上面“视图”栏里面倒数第二个。打开Debug|X64
将Microsoft.Cpp.x64.user的删掉,然后鼠标在Debug|X64右击,选择“添加新项目属性表”,命个名就好,这里叫Opencv400X64d。(日后新建项目,只需要将Microsoft.Cpp.x64.user的删掉,并添加Opencv400X64d即可,十分方便。)
3. 打开Opencv400X64d的属性,在通用属性—>VC++目录—>包含目录中 找到下面的位置,并添加成绝对路径就行了。
install\include
install\include\opencv2
4. 在通用属性—>VC++目录—>库目录中找到下面的位置,并添加成绝对路径就行了。
install\x64\vc15\lib
5. 通用属性—>链接器—>输入—>附加的依赖项将
\install\x64\vc15\lib
的全部lib文件写进去, 这里有一个巧方法,请看步骤6。
6. 在\install\x64\vc15\lib中添加python程序,程序内容是
import os
for name in os.listdir('./'):
print(name)
注意复制的时候不要把py文件和cmake文件也复制进去就行了。
7. 点击确定
测试代码
主要是测试SIFT算法,这是基础库没有的。
#include <iostream>
#include<opencv2\opencv.hpp>
#include "opencv2/xfeatures2d.hpp"
using namespace cv;
using namespace std;
using namespace xfeatures2d;
int main()
Mat matSrc = imread("C:/Users/qinze/Desktop/python1/opencv/flower.png");
Mat draw;
std::vector<KeyPoint> keypoints;
auto sift_detector = SIFT::create();
sift_detector->detect(matSrc, keypoints);