0

ビデオフレームから前景を抽出するのに問題があります。背景オブジェクトもほとんど抽出されません。サンプルビデオからスナップショットを撮り、背景画像として使用します。何をすべきかを提案します。ビデオからスナップショットを撮る代わりに、背景画像用に別の画像を撮るかどうか( 、スナップショットは画像よりも低解像度です)または他のより良いコード。抽出に使用されるコードは

int _tmain(int argc, _TCHAR* argv[])
{   

    IplImage  *frame = NULL;
    IplImage  *img1 = NULL;

    IplImage  *grey  = NULL;
    IplImage  *edges = NULL;
        int delay = 0, key=0, i=0;
    CvCapture *video = NULL;
    CvCapture *video1 = NULL;

        cvNamedWindow("window_name");

        video = cvCreateFileCapture("sample.avi");
        video1 = cvCreateFileCapture("sample.avi");


    frame = cvQueryFrame(video);
    img1 = cvQueryFrame(video1);
       grey  = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
       edges  = cvCreateImage(cvGetSize(img1), IPL_DEPTH_8U, 1);

  cvShowImage("backgrnd", img1);

//get height and width using OpenCV functions
 const int &rows = img1->width;
 const int &cols =frame->height;
  BYTE *Pixel2=0;
  cvGetRawData(img1,&Pixel2,0,0);
         while (frame) {


 BYTE *Pixel1=0;
//extract pixels using the OpenCV function cvGetRawData

 cvGetRawData(frame,&Pixel1,0,0);

//register int to increase the speed
register  int r,ri,c;

 //to find diffrence of 2 images by pixel to pixel comparision
for(r = 0, ri = 0; r < rows*3; r++, ri += cols)
 {
     for(c = 0; c < cols; c++)
         {
             //get the difference in pixels
             Pixel1[ri + c] = Pixel1[ri + c] - Pixel2[ri + c];

             //set threshold value as 100 for comparision, it can be changed to values between 50 and 200, for getting binary image
             if(Pixel1[ri + c] < 150)
                 {
                     Pixel1[ri + c]=0;
                 }
             else   
                    Pixel1[ri + c]=255;   

         }//for c

 }//for r, ri   
Return 0;
}
4

1 に答える 1

0

前景/背景のセグメンテーションは、深くて難しい問題です。自問する最初で最も重要なことは、「背景に対する前景の定義は何ですか?」ということです。時間の経過とともに背景の外観が大幅に変化する場合があり、前景/背景のセグメンテーションが特に困難になります。あなたの答えに応じて、非常にうまく機能するさまざまな方法があります。一部は本質的に統計的であり、特定のピクセルでの色の確率分布を処理したり、画像から抽出された特徴を処理したりします。ビデオ内の特徴を追跡し、さまざまな動く特徴のダイナミクスに基づいて画像をセグメント化しようとするものもあります。さらに、主成分分析の変種に基づいた、本質的により代数的なものもあります。そこには膨大な数の優れたアルゴリズムがあり、

を使用している場合は、プレスの新鮮な をOpenCV入手することを強くお勧めします。OpenCV2.2videoモジュールにはOpenCV2.2、フォアグラウンド/バックグラウンド セグメンテーション用の便利なツールがいくつかあります。コード内のドキュメントには、さまざまなアルゴリズムの背後にある理論を説明する参考文献や論文も示されています。

頑張ってください!

于 2011-02-02T08:17:04.543 に答える