Opencv 从手上拔出手指
我用这个代码在用户向相机举手时提取手指 插入这些线以查找凸性后,将引发以下错误Opencv 从手上拔出手指,opencv,computer-vision,gesture-recognition,convex-hull,Opencv,Computer Vision,Gesture Recognition,Convex Hull,我用这个代码在用户向相机举手时提取手指 插入这些线以查找凸性后,将引发以下错误 if (contours[i].size() >3 ) { cout<<"inside"<<endl; convexityDefects(contours[i], hull[i], defects[i]); } if(轮廓[i].size()>3) { cout问题(或者至少是我能看到的主要问题)在于你构造轮廓的方式
if (contours[i].size() >3 )
{
cout<<"inside"<<endl;
convexityDefects(contours[i], hull[i], defects[i]);
}
if(轮廓[i].size()>3)
{
cout问题(或者至少是我能看到的主要问题)在于你构造轮廓的方式。你应该使用:
vector<vector<int> >hull( contours.size() );
vectorchell(contours.size());
而不是:
vector<vector<Point> >hull( contours.size() );
vectorchell(contours.size());
这是因为凸性缺陷
函数仅适用于由一系列索引而不是一系列点表示的凸壳。感谢罗杰的回复。我按照您的建议修改了代码,现在得到了“OpenCV错误:断言失败(npoints>0)”在drawContours文件C:/slave/builds/WinInstallerMegaPack/src/opencv/modules/imgproc/src/courtours.cpp第1821行中,此应用程序请求运行时以异常方式终止它。请与应用程序的支持团队联系以获取更多信息。在抛出“cv::Exception”what()的实例后调用terminate:C:/slave/builds/WinInstallerMegaPack/src/opencv/modules/imgproc/src/contours.cpp:1821:错误:(-215)npoints>0在函数drawContours'中,但这一次,for循环迭代两次。@user2881263是的,这是一个常见问题-凸面缺陷
需要索引,而drawContours
需要点。快速修复方法是同时提取-使用凸面缺陷的索引和用于绘制的点,您只需要所有converxhull
两次(每种输出一次)。谢谢罗杰。你的解决方案对我有效。不幸的是,我没有足够的分数来支持你的答案。顺便说一句。你能告诉我如何提取凸面缺陷点来画一个圆吗?@user2881263好的,你现在有更多的代表,如果(没有义务),你会得到另外2个.如果你有一个新问题,最好用一个例子提问,而不是继续评论。
vector<vector<Point> >hull( contours.size() );