您的位置:首页 > 运维架构

OpenCV 使用convexHull 函数遇到的一些问题

2017-03-15 16:11 375 查看
对于任意contour都能接受代码(仅限于图片)。

1.首先,若要使用convexityDefects  则必须声明 contour_hull的形式为

vector<int> contour_hull(contour.size());

否则会报错,这点必须注意。

2.其次,一个可能的愚蠢问题来自 contour的size是不够的。

contour.size() > 3

这个就是说,不够四个点,没有凸包,原理很好理解。但也是大家最容易犯的错误。切记。

这条报错基本处在isContourConvex这个函数上。

编程中最主要的还是要关注具体问题的逻辑,不光是代码没问题。

编译能通过,只是说代码基础逻辑没问题,但业务逻辑未必符合。

下面是代码。

int ConvexHullTest(vector<Point> contour)
{
vector<int> contour_hull(contour.size());
Mat contour_image(contour_hull);
if (contour.size() > 3)
cv::convexHull(Mat(contour), contour_hull, false);
else
return 0;
vector<Vec4i> defects(contour.size());
if (!isContourConvex(contour) && contour_hull.size() > 3) {
//cout<<"轮廓不是凸包"<<endl;
convexityDefects(
contour,
Mat(contour_hull),
defects
);
return defects.size();
}
else
return 0;
//contour_hull.swap(contour_hull);
//defects.swap(defects);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: