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);
}
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);
}
相关文章推荐
- 使用wcscat_s函数时遇到的一些问题
- 刚才遇到了关于C#使用外部DLL函数上的char*的问题。
- 关于用c生成的dll在使用其他供应商的工具创建可执行模块时遇到的一些问题
- 使用S3C2440开发板遇到的一些问题
- 使用webchart过程中遇到的一些问题
- Java赋值运算符(+=、-=、*=、/=)使用中遇到的一些问题
- VC 使用过程中所遇到的一些问题,汇总在这里,希望对后来者有些许帮助
- 在C++中调用C写的函数(使用lex_yacc遇到的问题)
- 使用Linq 更新数据库时遇到的一些问题及解决办法
- 使用desinger时遇到的一些问题的处理分享
- [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题 22
- tomcat,jboss使用中遇到的一些问题的解决
- 使用DEDECMS中遇到的一些零碎问题
- 使用LWUIT中遇到的一些问题
- SQLSERVER2000使用中遇到的一些小问题,不断更新中。。。
- 使用ajax遇到的一些小问题
- 在使用Struts的过程中也遇到了一些问题,现在总结一下
- 使用存储过程遇到的一些问题
- [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题
- 使用Linq 更新数据库时遇到的一些问题及解决办法