MFC引入opencv过程中遇到的报错及解决

准备工作:创建一个基于对话框的MFC项目(我使用的是vs2019),且已经下载了opencv包。这里不多赘述:

随后就是配置环境变量和在项目中引入opencv的相关文件了,这部分操作有很多教程,也略过。这篇写得很详细,推荐参考:

mfc | mfc集成opencv,实现监控、拍照、录像、录像播放(保姆级教程)_mfc录屏软件-优快云博客

(大致就是把opencv中的include和lib文件加入项目文件夹下,再在项目属性中的(VC++)库目录、(C/C++ _常规)附加包含目录和(链接器->输入)附加依赖项中添加对应的文件。)

一、在项目属性中配置好opencv后依旧报错

以上这些步骤完成后,也引入了opencv头文件,使用了cv命名空间,但仍然大量报错,好像没有引入一样(还有一种情况是确实没任何报错,但是编译一直失败):

解决方法:1、先试试“清理解决方案+重新生成解决方案”的组合拳,然后关闭vs,重新打开项目。之前有些类似的问题这样就解决了。当然,这次失效了。

2、打开“视图-其他窗口-属性管理器”,然后在右边就可以打开,如图。

如图,观察你是Debug/Release + x64/x86中的哪个组合,然后在右边找到对应的,点击右键-属性,然后就到了最初项目配置熟悉部分。在这里重新进行一开始的配置过程,复读坤:大致就是把opencv中的include和lib文件加入项目文件夹下,再在项目属性中的(VC++)库目录、(C/C++ _常规)附加包含目录和(链接器->输入)附加依赖项中添加对应的文件。

配置完成后,点击确定,运行,可无报错成功编译。

二、std与cv命名空间冲突问题

添加了#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui_c.h>
using namespace std;
using namespace cv;

等语句后,会报错:"ACCESS_MASK":不明确的符号。

原因:opencv的using namespace cv和windows.h中ACCESS_MASK定义冲突。

我的程序中使用opencv的部分不太多,所以···

解决:不使用using namespace cv;命名空间,一律改用cv::  (敷衍)

三、C2653 “cv”: 不是类或命名空间名称

解决了问题二后紧接着就是这个报错,当然其他所有cv命名空间的变量也会一起报错“未定义标识符xxx”。而且错误列表上方显示“未找到相关问题”,代码也未标红,但错误列表里依旧有很多报错,编译也失败。重新生成解决方案+重启,无效。最终搜索后得到解决方法,有效。

在“项目--属性--C/C++  预编译头”中,把预编译头改成“创建(/YC)”,问题解决。

至于其中原理,参考这篇文章,写得很详细:

为什么要使用预编译头_是否使用预编译头文件有什么影响-优快云博客

最后再补充一个:我在做发布版本时,把配置和平台换成了release和x64,再次给各个位置添加了依赖的文件。此时在release下需要把“链接器-输入-附加依赖项”中的lib文件改为不带d的那个lib文件,如图。(或两个lib文件都写上,但是不带d的放前面)

如果未修改此处,可能会引发这个报错:LNK2001    无法解析的外部符号 "public: void __cdecl cv::Mat::copyTo(class cv::_OutputArray const &)const " (?copyTo@Mat@cv@@QEBAXAEBV_OutputArray@2@@Z)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值