c – OpenCV边界框
发布时间:2020-12-16 10:23:49 所属栏目:百科 来源:网络整理
导读:我正在使用C环境中的OpenCV软件.目的是检测拳击手套并在手套轮廓周围画一个边界框. 我遇到的问题是边界框被淹没不止一次,实际上绘制了多个框.我过去几天试图做的是以某种方式消除绘制的盒子数量并且只绘制一个大的边界框. 我正在寻找一些技术来填充整个对象,
我正在使用C环境中的OpenCV软件.目的是检测拳击手套并在手套轮廓周围画一个边界框.
我遇到的问题是边界框被淹没不止一次,实际上绘制了多个框.我过去几天试图做的是以某种方式消除绘制的盒子数量并且只绘制一个大的边界框. 我正在寻找一些技术来填充整个对象,我相信在这种情况下会有所帮助. 下面我发布了用于实现图像中显示的结果的代码: vector<vector<Point> > contours; vector<Vec4i> hierarchy; vector<Vec3f> vecCircles; vector<Vec3f>::iterator itrCircles; while(1) { Mat frame; cap >> frame; // get a new frame from camera ///////////////////// Mat imgHSV; cvtColor( frame,imgHSV,CV_BGR2HSV ); //////////////////// Mat blur_out; GaussianBlur(imgHSV,blur_out,Size(1,1),2.0,2.0); //////////////////// Mat range_out; inRange(blur_out,Scalar(100,100,100),Scalar(120,255,255),range_out); //////////////////// findContours(range_out,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0) ); /// Approximate contours to polygons + get bounding rects and circles vector<vector<Point> > contours_poly( contours.size() ); vector<Rect> boundRect( contours.size() ); vector<Point2f>center( contours.size() ); vector<float>radius( contours.size() ); for( int i = 0; i < contours.size(); i++ ) { approxPolyDP( Mat(contours[i]),contours_poly[i],3,true ); boundRect[i] = boundingRect( Mat(contours_poly[i]) ); } /// Draw polygonal contour + bonding rects Mat drawing = Mat::zeros( range_out.size(),CV_8UC3 ); for( int i = 0; i< contours.size(); i++ ) { Scalar color = Scalar(255,255); drawContours( drawing,contours_poly,i,color,1,8,vector<Vec4i>(),Point() ); rectangle( drawing,boundRect[i].tl(),boundRect[i].br(),2,0 ); } 如果有人可以提出一些提示或提供一些信息来源,我可以找到我的问题的答案. 编辑(快速更新): 我设法将输出图像逐渐安静地提升到安静的结果.关键是使用erode& amp;扩张以及我的findContours()函数.我将CV_RETR_TREE更改为CV_RETR_EXTERNAL.我还解决了一些其他小事,但效果很好: ? 不知道我是否应该在这里写这个或打开新的线程….但现在我需要一些帮助组件标签和提取参数,如中心点和区域. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |