【问题标题】:Extracting foreground from video stream从视频流中提取前景
【发布时间】:2013-04-21 13:22:40
【问题描述】:

我正在从事一个视频处理项目,该项目将摄像头馈送作为输入并具有静态背景。我不需要像opencv中的BackgroundSubtractorMOG那样的任何类型的动态背景生成。我正在尝试将前景对象绑定在边界框内。所以这就是我所做的

cv::absdiff(back_frame,matProcessed,temp);         //back_frame is the background matProcessed is the frame from CAMERA in grayscale
cv::threshold(temp,temp,20,255,THRESH_BINARY);

cv::findContours(temp,contours,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
std::vector<Rect> boundRect( contours.size() );
std::vector< std::vector<Point> > contours_poly( contours.size() );

int j=0;
for(int i = 0; i < contours.size(); i++ )
{
           if(contourArea(contours[i])>100)
           {
               approxPolyDP( Mat(contours[i]), contours_poly[i], 10, true );
               boundRect[j] = boundingRect( Mat(contours_poly[i]) );
               j++;
           }


 }
 cv::rect r;
   for (int i = 0; i < boundRect.size(); i++)
    {
        r = boundRect[i];

        cv::rectangle(
            frame,
            cv::Point(r.x, r.y),
            cv::Point(r.x + r.width, r.y + r.height),
            CV_RGB(0,255,0)
        );
    }

但问题是我没有正确获得前景。无论如何我可以改进前景生成并始终使用一些矩形边界框来绑定前景对象,而不管背景复杂性和其他因素如何??

【问题讨论】:

    标签: c++ opencv image-processing background-subtraction


    【解决方案1】:

    有多种简单和复杂的方法可以做到这一点。绝对推荐使用逐像素概率方法。您还可以在外观上使用诸如马尔可夫模型之类的东西来优化您的结果。请参阅this paper,特别是相关工作部分以及他们优化前景对象的最后一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2017-04-15
      • 1970-01-01
      相关资源
      最近更新 更多