opencv Mat::at<>()报错问题记录

//1.它是一个二维矩阵,如果矩阵的维度大于 2 ,执行出错
CV_DbgAssert(dims <= 2);
 
//2.如果传过来的矩阵数据为空,执行出错
CV_DbgAssert(data); 
 
//3.像素高度位置访问不到像素,如图像为100x200,给出的访问命令像素点指向了(100,201)
CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
 
//4.像素高度位置访问不到像素,如图像为100x200,给出的访问命令像素点指向了(101,200)
CV_DbgAssert((unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels()));
 
//5.判断输入图像数据类型和 .at 操作中的类型是否一致
//eg:输入图像 image 数据类型为 uchar ,操作时写 image.at,执行出错
//输入图像和执行操作的类型要求严格一致,即便是 float 32位 和 float 64位 也会执行出错
CV_DbgAssert(CV_ELEM_SIZE1(traits::Depth<_Tp>::value) == elemSize1());

第一次使用opencv的Mat::at<>()函数,结果debug下中断在

CV_DbgAssert(CV_ELEM_SIZE1(traits::Depth<_Tp>::value) == elemSize1());

这个地方,纠结了好久才发现,是<>里面的数据类型写错了导致的

针对16位深的图,我取(1,1)位置的像素值的时候,写的是

Mat matImg;

matImg.at(1,1),

而实际上应该是

matImg.at(1,1)

另外要注意的是取像素值的时候,宽高要倒一下:

Mat::at(高,宽)

你可能感兴趣的:(QT,opencv,Mat)