2011-10-25 42 views
1

我這樣做:如何在Mat對象中查找Canny邊緣檢測到的像素?

Imgproc.Canny(mGraySubmat, mIntermediateMat, 50, 100); 

阻止我當I'm錯誤:
1.現在邊緣應該是mIntermediateMat。
2. mIntermediateMat中的所有像素應具有0或255的顏色值。(我使用mIntermediateMat.get(x,y)獲取值)。
3. mIntermediateMat.type()=>墊[480 * 640 * CV_8UC1,isCont =真,isSubmat =假,nativeObj = 0x139ec0,DATAADDR = 0x4453d010]

mGraySubmat.type()=>墊[480 * 640 * CV_8UC1,isCont = true,isSubmat = true,nativeObj = 0x1e8308,dataAddr = 0x450b4010]

現在讓我們說Canny檢測到類似於矩形的邊。現在我從這個矩形內的種子點開始,步行到北,南,東,西,並檢查每個像素值,直到到達邊緣。
查看結果:

圖片可以在這裏http://i.stack.imgur.com/JWVJW.png

發現步行到北似乎工作。在座標:x,y = 239,346 - >右邊找到值爲255的像素南:在x處找到值爲255的像素,y = 239,488(實際上488不能,因爲480是最大) - >錯誤
東:像素在x處找到值255,y = 342,388 - >錯誤
West:找不到像素,出現屏幕... - >錯誤
問題:什麼錯誤?爲什麼當我走過它時沒有檢測到邊緣像素。

重要提示:在圖片的頂部和左側有一個尺寸爲100像素的比例尺。原點位於左上角,x,y = 100,350的座標是右100像素和下像素350像素。

回答

1

我使用mIntermediateMat.get(x,y)獲取像素顏色值。這只是錯誤的。由於函數被定義爲Mat.get(rows,cols),它將是mIntermediateMat.get(y,x)。看到不同?我沒有。很多失去的時間和另一個愚蠢的獎勵給我。