簡體   English   中英

某些Pixal值上的OpenCV錯誤斷言失敗

[英]OpenCV Error Assertion failed on some Pixal Values

我把圖像加載到墊子上:

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:\opencv\build\include\opencv2\core\mat.hpp, line 537

誰能告訴我我做錯了什么? 奇怪的是它只出現在某些Pixel Values上

編輯:附加信息:如果我將我的面具加載為灰度,一切正常。 但是當我使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM