我是一个使用OpenCV和EmguCV的初学者。我有两个问题寻找轮廓(见下图)。问题A是关于不同的轮廓是如何相互匹配的。问题B是关于如何获得更平滑的轮廓。
要检测我正在使用的等高线:
( FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE,Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST);
有人能给我一些建议吗?
非常感谢!!
发布于 2015-03-12 06:57:32
骨架化是您的第一个问题的解决方案。请注意,有几种骨架化,因此,如果您尝试的没有产生期望的输出,尝试另一个。
对于问题B,如果不对图像进行缩放(人为地增大其大小),就不可能使轮廓变得更平滑。至于使等高线在4连通性中连续(因此对角线不算在内),您可以修改找到的等高线的链码。
CV_CHAIN_APPROX_NONE绝对存储所有的轮廓点。也就是说,轮廓的任何2个后续点(x1,y1)和(x2,y2)都将是水平的、垂直的或对角邻域,即最大(abs(x1-x2),abs(y2-y1)==1)。
对于每个等高线,遍历其链码数组。如果您遇到两个后续点之间的对角线变化,在链码数组中插入一个新的点,它将“填充对角线”以满足您的需要。例如:
xxx becomes xxxx or xxx
xxx xxx xxxx
https://stackoverflow.com/questions/29009844
复制