2013-05-29 27 views
6

Pracuję nad projektem przy użyciu OpenCV243, muszę uzyskać pierwszy plan podczas strumienia, mój problem polega na tym, że używam cv :: absdiff, aby uzyskać to naprawdę nie pomaga, tutaj jest mój kod i wynik.Kontekst i pierwszy plan w 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 jak widać pracę odejmowanie, ale to, co chcę dostać to tylko wartości, które zmieniły na przykład jeśli mają piksela w tle z [130,130,130] i samo pikseli ma [200,200,200] w ramce chcę uzyskać dokładnie te ostatnie wartości i nie [70,70,70] już widziałem ten poradnik: http://mateuszstankiewicz.eu/?p=189 ale nie mogę zrozumieć kod i mam problemy z ustawianiem cv :: BackgroundSubtractorMOG2 z mojej wersji OpenCV

Dzięki z góry za pomoc

ty

Odpowiedz

3

BackgroundSubtractorMOG2 powinny pracować z #include "opencv2/video/background_segm.hpp" Próbki z OpenCV ma dwa ładne C++ przykłady (w próbkach \ Directory cpp).

  • bgfg_segm.cpp pokazuje, jak korzystać z BackgroundSubtractorMOG2
  • bgfg_gmg.cpp wykorzystuje BackgroundSubtractorGMG

dostać ostatnią wartości (i asuming chodziło uzyskać planie wartości pikseli) można skopiować ramka za pomocą maski pierwszego planu. Odbywa się to również w pierwszym przykładzie, w następującym fragmencie:

bg_model(img, fgmask, update_bg_model ? -1 : 0); 
fgimg = Scalar::all(0); 
img.copyTo(fgimg, fgmask); 
Powiązane problemy