如何在Mat对象中找到canny edge检测到的像素?

时间:2011-10-25 15:08:23

标签: android image-processing opencv edge-detection

我这样做:

Imgproc.Canny(mGraySubmat, mIntermediateMat, 50, 100);  
当我错的时候阻止我:
1.现在边缘应该在mIntermediateMat中 2. mIntermediateMat中的所有像素的颜色值应为0或255.(我使用mIntermediateMat.get(x,y)获取值。)
3. mIntermediateMat.type()=> Mat [480 * 640 * CV_8UC1,isCont = true,isSubmat = false,nativeObj = 0x139ec0,dataAddr = 0x4453d010]

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

现在让我们说Canny检测到类似于矩形的边缘。现在我从这个矩形内的种子点开始,然后走到北,南,东,西,检查每个像素值,直到到达边缘。
查看结果:

图片可以在http://i.stack.imgur.com/JWVJW.png

找到

走向北方似乎有效。在坐标处找到值为255的像素:x,y = 239,346 - >右
南:在x处找到值为255的像素,y = 239,488(实际上是488,因为480是最大值) - >错误
东:在x处找到值为255的像素,y = 342,388 - >错误的
West:屏幕外没有找到像素...... - >错
问题:怎么了?为什么我走过它时没有检测到边缘像素。

重要提示:图片的顶部和左侧有一个尺寸为100像素的刻度。原点位于左上角,坐标为x,y = 100,350,右边是100像素,右边是350像素。

1 个答案:

答案 0 :(得分:1)

我用mIntermediateMat.get(x,y)获取了像素颜色值。那是错的。由于函数定义为Mat.get(rows,cols),因此它将是mIntermediateMat.get(y,x)。看到不同?我没有。很多失去的时间和另一个愚蠢的奖励对我来说。