OpenCV入门之常见错误整理(持续整理)

本文总结了初学者使用OpenCV时可能遇到的两个典型问题:1) CV_DbgAssert异常,通常是由于访问矩阵元素时类型不匹配导致,解决方法是确保类型正确;2) 未经处理的异常,这可能源于图像加载或通道错误,检查图像是否正确加载。同时,介绍了at函数的使用,包括访问灰度和彩色图像元素的方法。
摘要由CSDN通过智能技术生成

初学一门技术,肯定会遇到各种各样的问题,这里把我初学时遇到的问题进行整理并给出解决方案,希望能够对大家有所帮助。

1.CV_DbgAssert(CV_ELEM_SIZE1(traits::Depth<_Tp>::value) == elemSize1());处出现未经处理的异常
错误如图所示:
在这里插入图片描述
源代码:
在这里插入图片描述

这里错误的主要原因是利用Mat类建立的src对象是8位无符号uchar类型,而利用at访问的确实int类型,类型出错导致程序报错。

修改方案:
将int改为uchar,即:
在这里插入图片描述

ok,程序正常运行。

【注】:
at后的类型一旦填写出错就会报错误:
CV_DbgAssert(CV_ELEM_SIZE1(traits::Depth<_Tp>::value) == elemSize1());处出现未经处理的异常

所以如果你产生了这种错误,一定要回头去看是不是类型出错!

【拓展】:这里重点介绍一下at的用法:

at函数的功能是访问矩阵元素,比如:

Mat src(300, 400, CV_8UC1, Scalar(255));
int elem = src.at<uchar>(0, 0);
cout << elem << endl;

该代码含义是:创建一个300*400的8为uchar类型单通道Mat类型数据,且颜色赋值为255,输出第(0,0)的值。
显然我们知道,输出结果应该为255。

但是at后面类型是怎么确定的呢?当三通道时,访问元素应该怎么做呢?

【解释】:

src.at(i,j):取出灰度图像中i行j列的点。
src.at(i,j)[k]:取出彩色图像中i行j列第k通道的颜色点。k∈[0,2]
其中uchar,Vec3b都是图像像素值的类型,不要对Vec3b这种类型感觉害怕,其实在core里它是通过typedef Vec<T,N>来定义的,N代表元素的个数,T代表类型。

2.0x00007FFF71D63B29 处(位于 OpenCV_test.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x00000019982FE618 处。

错误如图所示:
在这里插入图片描述
解决方案:
上述错误可能是大家学习OpenCV最经常遇到的一种错误,其一般是由于图像加载失败或者图像通道错误等诸多原因引起。
因此,如果发生该错误,首先检查原图像,错误肯定围绕图像而产生的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wendy_ya

您的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值