1

我这样做:

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,y = 239,488 处找到值为 255 的像素(实际上不能为 488,因为 480 是最大值)->错误
的东:找到值为 255 的像素在 x,y = 342,388 -> 错误
的 West:未找到像素,超出屏幕... -> 错误
问题:出了什么问题?为什么当我走过边缘像素时未检测到它。

重要提示:图片的顶部和左侧有一个大小为 100 像素的刻度。原点在左上角,x,y = 100,350 的坐标将向右 100 像素和向下 350 像素。

4

1 回答 1

1

我使用 mIntermediateMat.get(x,y) 获取像素颜色值。那是错误的。因为函数被定义为 Mat.get(rows,cols),所以它是 mIntermediateMat.get(y,x)。看到不同?我没有。我浪费了很多时间和另一个愚蠢奖。

于 2011-11-17T13:50:17.483 回答