OpenCV错误声明在某些Pixal值上失败

我将一张图片加载到垫子上:

Mat Mask = cvLoadImage(filename);

它是一个3744 X 5616 RGB图像。 在下一步我将其转换为灰度。

cvtColor(Mask,Mask,CV_BGR2GRAY);

在此之后,我将其规格化为稍后使用完整的灰度:

normalize(Mask,Mask,0,255,NORM_MINMAX,CV_8U);

现在我需要特定的灰度值并获取某些值的错误:

for(int i=0;i<(Picture.rows);i++)
{
    for(int j=0;j<(Picture.cols);j++)
    {
Vec3b  masked = Mask.at<Vec3b>(i,j);
//some stuff
}
}

我在某些像素上收到以下错误:

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in unknown function, file c:opencvbuildincludeopencv2coremat.hpp, line 537

任何人都可以告诉我我做错了什么? 奇怪的是,它只出现在一些像素值上

编辑:其他信息:如果我加载我的面具作为灰度一切工作正常。 但是当我使用cvtColor()或Mat Mask = imread(filename,CV_LOAD_IMAGE_GRAYSCALE); 在图像上出现错误。 很奇怪...


我认为你的问题是你正在访问.at<Vec3b>(i,j)的二进制图像。 相反,你想用.at<uchar>(i,j)访问每个像素。 cvtColor(Mask,Mask,CV_BGR2GRAY); 将3通道BGR图像更改为单通道灰度图像。 .at<Vec3b>(i,j)正尝试访问3通道图像,该图像最终将在内存中超过图像阵列的末端,导致出现问题或触发这些断言。

for循环的内部部分应该如下所示:

unsigned char masked = Mask.at<uchar>(i,j);
链接地址: http://www.djcxy.com/p/89795.html

上一篇: OpenCV Error Assertion failed on some Pixal Values

下一篇: normalize histogram in c++