2013-05-29 22 views
6

OpenCV243 kullanarak bir proje üzerinde çalışıyorum, bir akış sırasında ön plana ihtiyacım var, Sorun benim cv :: absdiff kullanıyorum gerçekten işe yaramazsa, burada kodum ve sonuç.Arka plan ve ön planda 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 sen çıkarma çalışmaları görmek ama ne almak istiyorum [130130130] ve aynı piksel ile arka planda bir Pixel varsa örneğin değişti yalnızca değerleri olduğu gibi http://mateuszstankiewicz.eu/?p=189 ama kodu anlayamıyorum ve ben vardır: tam olarak son değerleri almak istiyorum ve [70,70,70] zaten bu öğretici gördüğüm karede [200200200] sahiptir cv ayarı sorunları :: BackgroundSubtractorMOG2 Benim OpenCV sürümü ile önceden

teşekkürler OpenCV ile örnekleri (cpp dizininde \ örneklerinde) iki güzel C++ örnekler var

cevap

3

BackgroundSubtractorMOG2 #include "opencv2/video/background_segm.hpp" ile çalışmalıdır yardım için.

  • bgfg_segm.cpp
  • bgfg_gmg.cpp son değerlerini almak için

BackgroundSubtractorGMG kullanır (ve ön plan piksel değerlerini almak demekti darlık) kopyalamak olabilir BackgroundSubtractorMOG2 nasıl kullanılacağını gösterir ön plan maskesini kullanarak çerçeve. Bu, aşağıdaki örnekte, aşağıdaki örnekte de yapılır:

bg_model(img, fgmask, update_bg_model ? -1 : 0); 
fgimg = Scalar::all(0); 
img.copyTo(fgimg, fgmask); 
İlgili konular