opencv 配置及测试中遇到的问题及解决方法(Microsoft C++ 异常: cv::Exception,位于内存位置 问题)

opencv 配置及测试中遇到的问题及解决方法

这是我第一次使用 opencv,配置是opencv3.4.1和Visual Studio 2019。本文主要写的是我在 配置编写运行第一个测试程序 的过程中遇到的一些问题

配置过程

配置过程的步骤是很清楚的,网上大多数的教程也有比较详细的讲解,这里比较推荐的是毛星云大神的教程:(下方链接)
https://blog.****.net/poem_qianmo/article/details/19809337

不过由于现在大多数都使用的是3.0.0以后的版本,还是有一些比较小的差异,以下是步骤,主要写与教程中可能存在差异的地方):

一、配置环境变量
步骤:此电脑》属性》高级系统设置》修改系统变量中的Path

!!!需注意的地方:
1.修改的Path是系统变量的Path,而非你的用户变量中的Path。
2.修改时不要将原先的删除(或直接使用“浏览”导致原先的被覆盖)
正确做法是添加分号后加上新的地址,或者新建后填写。
如果误删,可以找度娘复制一下填回去。
3.这一步是第一步,一定要在环境变量设置完后开始opencv的配置。
opencv 配置及测试中遇到的问题及解决方法(Microsoft C++ 异常: cv::Exception,位于内存位置 问题)
二、工程包含(include)目录的配置、工程库(lib)目录的配置、链接库的配置。

对于工程包含(include)目录的配置、工程库(lib)目录的配置,基本上按照教程的配置是没有问题的。而对于链接库而言,3.0.0之后的版本好像不再需要写数量那么多的lib。

附加依赖项一般只需添加一个opencv_world3xx(d).lib
(3xx 是版本号,比如我用的是3.4.1,就写341
d是否加 根据由是 Debug 还是 Release 模式来决定)
opencv 配置及测试中遇到的问题及解决方法(Microsoft C++ 异常: cv::Exception,位于内存位置 问题)
配置完成后,建议重启Visual Studio。

第一个测试程序

代码直接用大神教程里的就可以,这里再贴一下

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
Mat img=imread(“1.jpg”);
imshow(“载入中的图片”,img);
waitKey(6000);
}

可能会出现的问题:
1.#include<opencv2/opencv.hpp>直接标红色下划线
2.Mat或imshow标红色下划线
3.测试后报错:无法解析的外部函数
4.······
这几种一般是配置时出了问题,建议再根据步骤检查一遍
常见错误
1.附加依赖项填错——版本号及是否加d的问题
2.编译器选择不匹配)

接下来是一个花了我个把小时在度娘上的问题
Microsoft C++ 异常: cv::Exception,位于内存位置 的问题
可能的情况:
1.大神文章里有提到:工程属性里面关于带d和不带d的lib文件的附加依赖项的问题,就算配置好了每次想debug和release下都运行还得手动在工程属性里面加。当得到这样的错误时,可以把调试方式改一改,debug和release互换。
2.绝对路径和相对路径的处理:
如果正常复制路径,会是以下这种情况
C:\Users\······\test\opencv\test1\1.jpgopencv 配置及测试中遇到的问题及解决方法(Microsoft C++ 异常: cv::Exception,位于内存位置 问题)

这样会出现一个问题,因为"“在编程时是有转义的作用的,比如我们用的\n、\t等,这样在读取地址时,就会出现\D、\t、\o等,有些有意义,有些无意义,但肯定不能实现我们读取地址的功能。
解决方法:把”\“换成”\\“或”/"试试

3.重复的后缀(我才不会告诉你们我找这找了两个小时
以下是错误示范
opencv 配置及测试中遇到的问题及解决方法(Microsoft C++ 异常: cv::Exception,位于内存位置 问题)
乍一看好像没有毛病对吧,你品,你细品。
问题就出在这个1.jpg。其实它是有一个隐藏的后缀的,所以我对它的命名画蛇添足了,应该直接命名为”1“就可以。不然你把代码中改成"1.jpg.jpg" 其实也是可以的。

基本上,这三种就是大部分出现Microsoft C++ 异常: cv::Exception问题的根源了,希望可以帮助到和我一样初学opencv的小伙伴。