Beispiel #1
0
int main()
{
	//Mat image = imread("E:\\video\\PTES\\S1-T1-C\\video\\pets2006\\S1-T1-C\\4\\S1-T1-C.00001.jpeg");
	
	MyThread test;
	BackgroundImg bgImg;
	ObjectArea objectArea;
	//StaticRegion targetRegion;
	//list<DetectObject> staticTarget;

	Mat img, gray, mask, background;
	int nframe = 0;
	int OneFrameProcess = 0;
	int key;//控制视频播放
	MyLoadImage imagefile("E:\\video\\PTES\\S1-T1-C\\video\\pets2006\\S1-T1-C\\1\\S1-T1-C.");
	
#ifdef DEBUG
	clock_t start, finish;
	double sum=0.0;
#endif

	while (1)
	{

#ifdef DEBUG
		start = clock();
#endif
		nframe++;
		cout << nframe << endl;
		IplImage *frame = imagefile.GetFrameFromImg(nframe);
		img = cv::Mat(frame, true);
	    cvtColor(img, gray, CV_RGB2GRAY);
		if (nframe == 1)
		{
			mask.create(gray.size(), CV_8U);
			background.create(gray.size(), CV_8U);
			bgImg.Init(frame);  //初始化背景
		}
		mask.setTo(cv::Scalar(0));		
		background.setTo(cv::Scalar(0));
		test.DealImage(gray, mask, background);
		//objectArea.GetObjectArea(mask);
		//cv::Mat temp = objectArea.ReturnObjectArea();

		//把Mat类型转换成CvMat类型		
		 IplImage BinaryImage = mask.operator IplImage();
		 IplImage BackImage = background.operator IplImage();
		 IplImage grayImage = gray.operator IplImage();

		 objectArea.LocateObject(&BinaryImage, nframe);
		 //objectArea.ChoseRightObject(frame, bgImg);
		 objectArea.ShowObject(frame);
		 //检测到异常目标
		 //targetRegion.FindRawContourAreas(&BinaryImage, &grayImage, nframe);
		 //targetRegion.AttachTypeTag(&BackImage, &grayImage);
		// targetRegion.ExtractGoodAreas(staticTarget, &grayImage, StaticFrameThr, nframe);
		// targetRegion.ShowStaticAreas(frame, staticTarget);
		cvShowImage("src", frame);
		imshow("mask", mask);
		imshow("bg", background);
		if( ( key = cvWaitKey(OneFrameProcess ? 0 : 1)) == 27 )	
			break;
		if(key != -1)
		{
			OneFrameProcess = 1;
			if(key == 'r') OneFrameProcess = 0;
		}
		imagefile.ReleaseFrame();
#ifdef DEBUG
		finish = clock();
		double cur= (double)(finish-start)/CLOCKS_PER_SEC;
		sum += cur;
		cout << "avg:" << sum/nframe << "cur:" << cur << endl;  //s/frame:0.030(无处理)  0.078(无分块处理) 0.049(分块处理)
#endif
	}
	return 0;
}