티스토리 뷰

3학년 2학기/openCV

background

Hading 2016. 12. 5. 21:23

#include "stdafx.h"

#include "targetver.h"

#include "opencv2/opencv.hpp"

#include "opencv/cxcore.hpp"

#include "opencv/highgui.h"

#include <Windows.h>

#include<video/video.hpp>


using namespace cv;

using namespace std;


void bgsub(char *);


int main(int argc, char* argv[]) {

bgsub("bgs-사람들");


return 0;

}


void bgsub(char* wcam) {

Mat frame, fg, bg, dfg;

boolean stop(false), detectShadow = true; // 그림자를 찾아준다.

int history = 500, keyboard;

vector<vector<Point>>contours; // 내부의 벡터는 한사람의 테두리


namedWindow(wcam, CV_WINDOW_AUTOSIZE);

moveWindow(wcam, 100, 100);

namedWindow("BG");

namedWindow("FG");

namedWindow("dFG"); 


// video capture & bg-model

VideoCapture cap("pedestrian-epfl-campus.avi");

if (!cap.isOpened()) return;


int wide = (int)cap.get(CV_CAP_PROP_FRAME_WIDTH);

int high = (int)cap.get(CV_CAP_PROP_FRAME_HEIGHT);


// create a background subtractor 백그라운드 객체 만들기

Ptr<BackgroundSubtractor> pMOG2;

//pMOG2 = createBackgroundSubtractorMOG2(history, 16, detectShadow);

BackgroundSubtractorMOG2 mog2(history, 16, detectShadow); // 윗줄이 안되기 때문에 

pMOG2 = &mog2; 


// loop

while (!stop) {

if (!cap.read(frame)) {

cerr << "frame read err" << endl;

exit(EXIT_FAILURE);

}

//update background & get fg

//pMOG2->apply(frame, fg);

pMOG2 ->operator()(frame, fg, 0.01);// 그림자 값을 둘수 있다. 

erode(fg, fg, Mat());

dilate(fg, fg, Mat()); // 잡음 제거

//++show contours

findContours(fg, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);

drawContours(frame, contours, -1, Scalar(0, 0, 255), 2); // 칼라 이미지에 테두리를 그려라


imshow(wcam, frame); moveWindow(wcam, 100, 100);

imshow("FG", fg); moveWindow("FG", 100 + (wide + 16), 100);

//imshow("BG", bg); moveWindow("BG", 100 + (wide + 16)+ (wide + 16), 100);

//+++ show background

pMOG2->getBackgroundImage(bg);  

imshow("BG", bg);  moveWindow("BG", 100 + (wide + 16) * 2, 100);

absdiff(frame, bg, dfg); // frame 와 bg를 뺀다. 그리곤 절대값을 취해서 양수로 

imshow("dFG", dfg);  moveWindow("dFG", 100 + (wide + 16) * 3, 100);



if (waitKey(1) >= 0) stop = true;

}

cap.release();

}


결과 영상




'3학년 2학기 > openCV' 카테고리의 다른 글

Image segmentation  (0) 2016.12.05
사람의 피부 검출  (0) 2016.11.24
공간 필터링  (0) 2016.10.15
opencv 영상  (0) 2016.10.15
픽셀  (0) 2016.10.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함