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

2023-11-01

  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. 不要用盲目的努力去替代原该有的思考!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 如何将 Hudson/Jenkins 参数传递给 Windows 批处理命令

    好吧 我需要在我的 Hudson 作业中执行一个批处理文件 我有一个参数 Jenkis 参数 我需要将这个值 如参数 传递给批处理文件 我尝试了以下操作 Deploy cmd configuration DEPLOYCONFIGURATIO
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐