2011-10-25 43 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)。看到不同?我没有。很多失去的时间和另一个愚蠢的奖励给我。