Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 从手上拔出手指_Opencv_Computer Vision_Gesture Recognition_Convex Hull - Fatal编程技术网

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() );