Windows10上使用VS2017编译OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.6.2操作步骤加上VS2017配置opencv总结

  1. 环境:win10 64bit
  2. 软件:OpenCV3.4.2源码,OpenCV3.4.2 contrib(版本要一致)
  3. cmake:3.12.1 vs2017
  4. 流程:
    打开cmake-gui.exe,源码路径和生成路径加进去,configure,弹出的对话框中选择visual studio 15 2017 win64,这是编译的64位版本的,要是选择visual studio 15 2017就是32位版本的,点finish,完事之后也是会有红色的,找到OPENCV_EXTRA_MODULES_PATH选项,把OpenCV contrib目录下的modules路径给这里,注意:直接复制的路径是\的,但是需要/的。我试过不改,没有编译成功,报的错误是什么process什么的,那个错误日志被我删了,手贱!!!这里之后还需要configure,完事之后应该没有红色的了,要是有就去查看CMakeDownloadLog.txt,在遇到错误的时候首先应该想到查找日志,能精准找到错误原因,减少不必要的时间损耗。这部分要是没有红色就点generate

在生成路径下找到OpenCV.sln,选择CMakeTargets下的INSTALL,右击INSTALL-生成,开始生成文件,选择重新生成也是可以的

官网下载的OpenCV3.4.2.exe解压后就是编译好的OpenCV dll文件,百度云链接:
链接:https://pan.baidu.com/s/1YWkCLEZrpYxh9ci_ch_BSQ
提取码:pa0x

完整流程参考链接:https://blog.csdn.net/fengbingchun/article/details/84030309

这个链接生成的OpenCV动态库是正确的,已验证

2020年8月22更新一些注意事项:

  1. 想通过cmake编译OpenCV的话,在安装vs的时候需要勾选单个组件里cmake相关的组件,我勾选了两个
  2. opencv_contrib安装出现无法打开包括文件: “opencv2/xfeatures2d/cuda.hpp”:
    解决方法:
    在CMakeLists.txt增加以下内容(我用的绝对路径,然后注意路径使用’/’,我试过不改没成功):
    INCLUDE_DIRECTORIES(“opencv-3.4.2/opencv_contrib-3.4.2/modules/xfeatures2d/include”)
    CMakeLists.txt在以下的路径:
    opencv-3.4.2/modules/stitching/CMakeLists.txt
  3. 报错 data: Download failed: 28;“Timeout was reached”……
    Face: Can’t get model file for face alignment.
    解决方案:
    查看log file:
    查看生成路径中的CMakeDownloadLog.txt,能定位到问题是没有成功下载,按照给出来的浏览器路径下载,放到这个路径就好opencv-3.4.2/.cache/data/
  4. 报错信息 error C2440: “初始化”: 无法从“const char *”转换为“char *”
    有很多解决方案,我是双击报错信息,然后定位到报错的行,将char * 换成了const char * 解决了问题

接下来是在vs中配置OpenCV环境,这部分也是需要记录的:
我是vs小白,我原本以为我自己编译的OpenCV就已经配置好了,不需要再配置了,所以在这耗费的时间比较多,直到我意识到OpenCV是个开源的视觉库,vs是个IDE的时候才觉得我只是编译库,没有将vs和OpenCV建立连接,我才发现需要再配置一波OpenCV

正文开始:

  1. 将编译好的D:\vs2017\opencv\vs2017\install\x64\vc15\bin 目前本机路径加到环境变量中
  2. 将bin目录下的opencv_world342.dll和opencv_world342d.dll文件复制到C:\Windows\SysWOW64这个文件夹里面,我同时也将这两个文件放进了C:\Windows\System32这个文件夹,因为我觉得一般都是放这个文件夹
  3. 将bin目录里面的opencv_ffmpeg342_64.dll复制到C:\Windows\System32这个文件夹里面
  4. 在vs里新建一个空项目
  5. 进入属性管理器,菜单栏->视图->其他窗口->属性管理器 对对Debug|X64进行配置,右键Microsoft.Cpp.x64.user,点击属性对
    属性中的 VC++目录->包含目录和VC++目录->库目录进行添加相关路径,对 链接器->输入->附加依赖项进行添加相关路径
  6. 包含目录中加include,OpenCV,OpenCV2的路径
  7. 库目录中加入lib目录,这个目录和上面的bin目录在同一个层级
  8. 链接器->输入->附加依赖项中加入
    opencv_world342d.lib
    opencv_world342.lib
    教程上只加了一个lib,我都加进去了,因为觉得一起产生的,而且加了没报错
  9. 对Release|X64进行配置,右键Microsoft.Cpp.x64.user,点击属性 链接器->输入->附加依赖项中加入 opencv_world342.lib opencv_world342d.lib 同样这里我都配置了
  10. 至此就配置完事了,接下来就是读图测试OpenCV有没有成功

完整流程参考链接:https://blog.csdn.net/qq_41175905/article/details/80560429

按照这个链接配置成功,能成功读图,显示等等

  1. 遗留问题:
    “Project1.exe”(Win32): 已卸载“C:\Windows\System32\WinTypes.dll”
    “Project1.exe”(Win32): 已加载“C:\Windows\System32\clbcatq.dll”。无法查找或打开 PDB 文件。
    Critical error detected c0000374
    Project1.exe 已触发了一个断点。
    程序“[4836] Project1.exe”已退出,返回值为 0 (0x0)。

网上说这种问题可以略过,不是错误不是warning,不调试直接执行是不出现这个问题的!!!回头查清楚这部分内容!!!
2. 测试程序

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    
    
	const char* imagename = "E:\\test\\06.jpg";//此处为你自己的图片路径

	//从文件中读入图像
	Mat img = imread(imagename, 1);

	//如果读入图像失败
	if (img.empty())
	{
    
    
		fprintf(stderr, "Can not load image %s\n", imagename);
		return -1;
	}
	//显示图像
	imshow("image", img);

	//此函数等待按键,按键盘任意键就返回
	waitKey();
	return 0;
}

2020年8月22在自己电脑上配了一遍之后有点感悟:

  1. 我电脑装了cuda,在cmake的过程中需要把用到cuda的勾选掉,就是不编译这个
  2. 不要用盲目的努力去替代原该有的思考!!!

猜你喜欢

转载自blog.csdn.net/weixin_43868576/article/details/107567431