我这样做:
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 像素。