我正在将用opencv 1 C API编写的旧程序迁移到带有C ++的opencv2,旧代码使用'CV_IS_SEQ_CLOSED'来检查轮廓是否关闭。我google了很多,但无法找到如何用opencv2做同样的事情。那么有一种解决方法可以做同样的事情吗?
答案 0 :(得分:1)
不幸的是,cv::findContours()
没有提供有关它产生的轮廓的开放或闭合的信息。此外,封闭的轮廓不能保证具有相同的起点和终点。如果您在没有近似的情况下生成轮廓(通过传递CV_CHAIN_APPROX_NONE
标志),那么检查轮廓的第一个点和最后一个点之间的距离是否小于sqrt(2)
就足够了:
// 1.5 is approximately sqrt(2)
bool closed = cv::norm(contour.front() - contour.back()) < 1.5;
我不认为使用不同的近似方法可以保证这一点。