2013-10-13 66 views
0

我加載圖像到一個墊: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 
} 
} 

我m在一些像素上獲得以下錯誤:

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 

任何人都可以告訴我我做錯了什麼?奇怪的是,它只出現在一些像素值

編輯: 附加信息: 如果我加載我的面具作爲灰度一切工作正常。但是當我使用cvtColor()或Mat Mask = imread(filename,CV_LOAD_IMAGE_GRAYSCALE);在圖像上出現錯誤。非常奇怪...

+0

胡亂猜測 - 是在原始圖像中的最小/最大像素? – KobeJohn

+0

可悲的是沒有。這也是我的第一個猜測。在原始圖像中,當第一行出現錯誤時,這些值在196-200左右,並在211-216左右歸一化。原件上的最大值爲237,標準化值爲255. –

回答

2

我認爲你的問題是你正在訪問一個二進制圖像與.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); 
+0

非常感謝您按預期工作。 –

相關問題