Tom*_*azi 3 c++ opencv image-processing
我正在使用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,0,255);
drawContours( drawing, contours_poly, i, color, 1, 8, vector<Vec4i>(), 0, Point() );
rectangle( drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );
}
Run Code Online (Sandbox Code Playgroud)

如果有人可以提出一些提示或提供一些信息来源,我可以找到我的问题的答案.
编辑(快速更新):
我设法将输出图像逐渐安静地提升到安静的结果.关键是使用侵蚀和扩张以及我的findContours()功能.我改变了CV_RETR_TREE对 CV_RETR_EXTERNAL.我还解决了一些其他小事,但效果很好:
不知道我是否应该在这里写这个或打开新的线程....但现在我需要一些帮助组件标签和提取参数,如中心点和区域.:)
| 归档时间: |
|
| 查看次数: |
23147 次 |
| 最近记录: |