相关文章推荐
潇洒的茶壶  ·  vscode ...·  2 周前    · 
暴躁的香烟  ·  opencv yuv转rgb - CSDN文库·  2 周前    · 
逆袭的鸵鸟  ·  python opencv yuv 转 ...·  2 周前    · 
近视的砖头  ·  javacv函数关系opencv ...·  2 周前    · 
博学的绿茶  ·  OpenCvSharp.OpenCvShar ...·  2 周前    · 
鼻子大的松鼠  ·  C# ...·  1 年前    · 

Cmake 配置Opencv以及拓展库(4.1.0版本)

用cmake配置opencv有时候真的要天时地利人和,我用了两天的时间,查阅了至少十篇博客才成功编译出来,之所以不放弃或者说不用别人编译好的lib和dll文件,主要是因为作为学习计算机的学生,使用cmake算是一项基本的本领。

这篇文章和网上的其他博文会不太一样,主要是根据两天的配置所出现的错误进行讲解,具有很强的真实性和可行性,希望后面的人不要再踩这些坑。

准备工作

  1. cmake 版本3.13.2
  2. opencv-4.1.0
  3. opencv-contrib-4.1.0
  4. 科学上网工具
  5. 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编译

  1. 第一行是opencv/sources的路径。
  2. 第二行是保存的路径,随意选。这里的文件夹命名为CMake_opencv4.0_VS2017_X64
  3. 点击第一次Configure 会出现选择版本界面。
  4. 对于3.13版本 选择VS2015 Win64 对于3.16版本,选择VS2015 在下面一行输入x64 点击finish 进行configure。
  5. 当显示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编译

  1. 点击Open Project或者在文件夹找到OpenCV.sln。

2. 在Debug模式下,选择x64,然后就是”重新生成解决方案“。

我遇到的编译的错误:

  1. 无法打开 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);