我正在将用opencv 1 C API编写的旧程序迁移到带有C++的opencv2,而旧代码使用“CV_IS_SEQ_CLOSED”检查轮廓是否闭合。我在Google上搜索了很多,但找不到如何用opencv2做同样的事情。那么,有没有一种解决方法可以做完全一样的事情?
最佳答案
不幸的是,cv::findContours()
没有提供有关其生成的轮廓的开放度或封闭度的信息。此外,不能保证闭合轮廓具有相同的起点和终点。如果要生成不近似的轮廓(通过传递CV_CHAIN_APPROX_NONE
标志),则检查轮廓的第一个点和最后一个点之间的距离是否小于sqrt(2)
应该足够:
// 1.5 is approximately sqrt(2)
bool closed = cv::norm(contour.front() - contour.back()) < 1.5;
我认为使用其他近似方法无法保证。
关于opencv - 在opencv2中相当于 'CV_IS_SEQ_CLOSED'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19127642/