我正在使用 C++ 将用 opencv 1 C API 编写的旧程序迁移到 opencv2,旧代码使用“CV_IS_SEQ_CLOSED”来检查轮廓是否关闭。我用谷歌搜索了很多,但找不到如何用 opencv2 做同样的事情。那么有没有一种解决方法可以做同样的事情呢?
问问题
91 次
1 回答
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;
我不认为使用不同的近似方法可以保证这一点。
于 2013-10-02T18:08:54.253 回答