2013-05-29 4 views
6

ich arbeite an einem Projekt mit OpenCV243, ich brauche den Vordergrund während eines Streams zu bekommen, mein Problem ist, dass ich den cv :: absdiff verwenden, um es nicht wirklich hilft, hier ist mein Code und das Ergebnis.Hintergrund und Vordergrund in 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 , wie Sie die Subtraktion der Arbeit sehen können, aber was ich will zu bekommen ist nur die Werte, dass beispielsweise geändert, wenn ein Pixel im Hintergrund mit haben [130130130] und die gleiche Pixel hat [200200200] im Rahmen möchte ich genau die letzten Werte erhalten und nicht [70,70,70] habe ich dieses Tutorial schon gesehen: http://mateuszstankiewicz.eu/?p=189 aber ich kann nicht den Code verstehen, und ich habe Probleme Einstellung cv :: BackgroundSubtractorMOG2 mit meiner OpenCV Version

Dank im Voraus für Sie helfen

Antwort

3

BackgroundSubtractorMOG2 mit #include "opencv2/video/background_segm.hpp" Die Proben mit OpenCV haben zwei schöne C++ Beispiele (in den Proben \ cpp-Verzeichnis) funktionieren soll.

  • bgfg_segm.cpp zeigt, wie die BackgroundSubtractorMOG2 verwenden
  • bgfg_gmg.cpp verwendet BackgroundSubtractorGMG

Um die letzten Werte zu erhalten (und asuming Sie die Vordergrundpixelwerte erhalten gemeint) Sie die kopieren konnte Rahmen mit der Vordergrundmaske. Dies wird auch im ersten Beispiel im folgenden Code-Schnipsel vorgenommen:

bg_model(img, fgmask, update_bg_model ? -1 : 0); 
fgimg = Scalar::all(0); 
img.copyTo(fgimg, fgmask); 
Verwandte Themen