2013-05-29 17 views
6

私はOpenCV243を使ってプロジェクトを進めていますが、ストリーム中にフォアグラウンドを取得する必要があります。問題は私がcv :: absdiffを使って取得することです。私のコードとその結果。OpencVの背景と前景

#include <iostream> 
#include<opencv2\opencv.hpp> 
#include<opencv2\calib3d\calib3d.hpp> 
#include<opencv2\core\core.hpp> 
#include <opencv2\highgui\highgui.hpp> 

int main(){ 
    cv::VideoCapture cap(0); 
    cv::Mat frame,frame1,frame2; 
    cap >> frame; 
    frame.copyTo(frame1); 
    cv::imwrite("background.jpeg",frame1); 
    int key = 0; 
    while(key!=27){ 
     cap >> frame; 
     cv::absdiff(frame, frame1, frame2); // frame2 = frame -frame1 
     cv::imshow("foreground", frame2); 
     if(key=='c'){ 
      //frame.copyTo(frame2); 
      cv::imwrite("foreground.jpeg", frame2); 
      key = 0; 
     } 

     cv::imshow("frame",frame); 
     key = cv::waitKey(10); 
    } 
    cap.release(); 
    return 0; 
} 

Background foreground あなたは減算作品を見ることができるとしてではなく[130130130]と同じピクセルと背景のピクセルを持っている場合、私が取得したいことはそれだけでの値は、例えば変更されましたhttp://mateuszstankiewicz.eu/?p=189が が、私はコードを理解することはできませんし、私が持っている:私はまさに最後の値を取得したいとしませ[70,70,70] 私はすでにこのチュートリアルを見てきたフレームで[200200200]を持っていますcv :: BackgroundSubtractorMOG2の設定に関する問題私のOpenCVのバージョンで事前に

おかげで、あなたは、OpenCVのとサンプルが(CPPディレクトリ\試料中の)2つの素敵なC++の例を持って

答えて

3

BackgroundSubtractorMOG2が#include "opencv2/video/background_segm.hpp" で動作するはず助けるために。

  • bgfg_segm.cppは
  • bgfg_gmg.cppは最後の値を取得するには

BackgroundSubtractorGMGを使用しています(そして、あなたがフォアグラウンドピクセル値を取得するためのものasuming)コピーできBackgroundSubtractorMOG2を使用する方法を示していますフォアグラウンドマスクを使用してこれは、次のスニペットの最初の例でも行われます。

bg_model(img, fgmask, update_bg_model ? -1 : 0); 
fgimg = Scalar::all(0); 
img.copyTo(fgimg, fgmask); 
関連する問題