C++ 获取非闭合轮廓
我在OpenCV C++中使用了FieldTrof方法。问题是,我得到的轮廓似乎是非闭合的,一条直线或曲线,但当我检查像素时,它们是重复的,有时是闭合的。例如:C++ 获取非闭合轮廓,c++,opencv,image-processing,C++,Opencv,Image Processing,我在OpenCV C++中使用了FieldTrof方法。问题是,我得到的轮廓似乎是非闭合的,一条直线或曲线,但当我检查像素时,它们是重复的,有时是闭合的。例如: 1,1 2,2 3,3 4,4 3,3 2,2 1,1 1,1 2,2 3,3 4,4 3,3 2,2 我试图得到一半的输出像素,但我意识到这个问题并不总是发生!有时结果并不是双重的。此外,我提到的例子非常理想。有时,起点和终点不一样。例如: 1,1 2,2 3,3 4,4 3,3 2,2 1,1 1,1 2,2 3,3
1,1
2,2
3,3
4,4
3,3
2,2
1,1
1,1
2,2
3,3
4,4
3,3
2,2
我试图得到一半的输出像素,但我意识到这个问题并不总是发生!有时结果并不是双重的。此外,我提到的例子非常理想。有时,起点和终点不一样。例如:
1,1
2,2
3,3
4,4
3,3
2,2
1,1
1,1
2,2
3,3
4,4
3,3
2,2
代码是:
cv::findContours(canny_output, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cv::Point(0, 0));
提前感谢:)
进一步解释:
我在图像上应用轮廓(canny输出),然后我想根据数学标准过滤这些轮廓。为了能够使用这些标准,我需要知道每个轮廓的每个像素的坐标(x,y)。
当我查看轮廓的像素时,它似乎是这样的:
1,1
2,2
3,3
4,4
3,3
2,2
1,1
1,1
2,2
3,3
4,4
换句话说,这条线是双倍的(两条相同的线相互重叠)。
为了克服这个问题,我尝试简单地删除一半像素,以获得如下效果:
1,1
2,2
3,3
4,4
3,3
2,2
1,1
1,1
2,2
3,3
4,4
这种方法在某些轮廓上效果很好,但我意识到有些轮廓会以嘈杂的方式加倍,如:
我怎样才能解决这个问题。
非常感谢你的问题很难理解。您所说的“似乎是非闭合的”、“像素是重复的”、“获得一半的输出像素”、“结果不是双精度的”、“理想示例”是什么意思???到底是什么问题?你能提供数据吗?@Triarion谢谢你的反馈,我将提供一些information@Trilarion我希望现在有点清楚,非常感谢:)为什么需要一个无孔的封闭阵列?(绘制轮廓将至少导致图像中的闭合轮廓)@berak我需要它用于线性检查和其他一些标准