OpenCv 자체 전경 측정 방법

3280 단어 컴퓨터 시각
1.opencv2.3 버전 내 혼합 고스 배경 모델링 기반 목표 추적 코드
#include "opencv2/video/background_segm.hpp"
#include "opencv2/highgui/highgui.hpp"
#include 
#include 
#include 
using namespace cv;

void help()
{
	printf("
Do background segmentation, especially demonstrating the use of cvUpdateBGStatModel().
" "Learns the background at the start and then segments.
" "Learning is togged by the space key. Will read from file or camera
" "Call:
" "./ bgfg_segm [file name -- if no name, read from camera]

"); } //this is a sample for foreground detection functions int main(int argc, char** argv) { VideoCapture cap; bool update_bg_model = true; if( argc < 2 ) cap.open(0); else cap.open(argv[1]); help(); if( !cap.isOpened() ) { printf("can not open camera or video file
"); return -1; } namedWindow("image", CV_WINDOW_NORMAL); namedWindow("foreground mask", CV_WINDOW_NORMAL); namedWindow("foreground image", CV_WINDOW_NORMAL); namedWindow("mean background image", CV_WINDOW_NORMAL); BackgroundSubtractorMOG2 bg_model; Mat img, fgmask, fgimg; for(;;) { cap >> img; if( img.empty() ) break; if( fgimg.empty() ) fgimg.create(img.size(), img.type()); //update the model bg_model(img, fgmask, update_bg_model ? -1 : 0); fgimg = Scalar::all(0); img.copyTo(fgimg, fgmask); Mat bgimg; bg_model.getBackgroundImage(bgimg); //erode(fgimg,fgimg,0); //dilate(fgimg,fgimg,0); int nl = fgmask.rows; int nc = fgmask.cols * fgmask.channels(); // for(int j=0; j(j); for(int i=0; i

2.OpenCV1.0의 코드는 다음과 같습니다.
#include "cvaux.h"
#include "highgui.h"
#include 

//this is a sample for foreground detection functions
int main(int argc, char** argv)
{
	IplImage*       tmp_frame = NULL;
	CvCapture*      cap = NULL;
	
	if( argc < 2 )
	{
		printf("please specify video file name 
"); exit(0); } //cap = cvCaptureFromFile(argv[1]); cap=cvCreateCameraCapture(0); tmp_frame = cvQueryFrame(cap); if(!tmp_frame) { printf("bad video
"); exit(0); } cvNamedWindow("BG", 1); cvNamedWindow("FG", 1); //create BG model CvBGStatModel* bg_model = cvCreateFGDStatModel( tmp_frame ); for( int fr = 1;tmp_frame; tmp_frame = cvQueryFrame(cap), fr++ ) { double t = (double)cvGetTickCount(); cvUpdateBGStatModel( tmp_frame, bg_model ); t = (double)cvGetTickCount() - t; printf( "%.1f
", t/(cvGetTickFrequency()*1000.) ); cvShowImage("BG", bg_model->background); cvShowImage("FG", bg_model->foreground); char k = cvWaitKey(5); if( k == 27 ) break; //printf("frame# %d \r", fr); } cvReleaseBGStatModel( &bg_model ); cvReleaseCapture(&cap); return 0; }

좋은 웹페이지 즐겨찾기