⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 color_update tracking.cpp

📁 在粒子滤波+颜色直方图+遮挡处理的基础上
💻 CPP
字号:

#include "stdafx.h"



int main( int argc, char** argv )
{
	IplImage* pFrame = NULL; 
	CvCapture* pCapture = NULL;

	cvNamedWindow("video", 1);

	//粒子滤波的参数定义
	int shelter = 0;//0:the object isnot sheltered; 1:the object is sheltered
	// How many condensentation steps per "tracking" step
	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	int steps=5;
	int samplenum = 250;
	float vx=0,vy=0;
	int Dim=2;
	int MDim=36;

	CvConDensation *ConDens = cvCreateConDensation(Dim, MDim, samplenum);
	CvMat* LB = cvCreateMat(Dim,1,CV_32FC1);
	CvMat* UB = cvCreateMat(Dim,1,CV_32FC1);

	//////////////////////////////////////////////
	//////initialize the beginning position///////
	////////////////////////////////////////////////

	//chicken.avi
	//CvPoint state_prediction = cvPoint(115, 65);

	//chicken2.avi
	//CvPoint state_prediction = cvPoint(170, 90);

	//sheltered_chicken.avi
	CvPoint state_prediction = cvPoint(70, 100);

	//shortvideo.avi
	//CvPoint state_prediction = cvPoint(153, 180);

	//pedmovie.avi
	//CvPoint state_prediction = cvPoint(280, 35);

	
	CvRandState rng;
	cvRandInit(&rng, 0, 1, -1, 0);

	//目标区域大小
	//chicken.avi
	int a=10,b=20;

	//shortvideo.avi
	//int a=14, b=6;

	//pedmovie.avi
	//int a=10, b=20;


	//彩色图像及各通道参数定义

	int ColorHistBins = 36;
	CvMat* ModelColorHistMat = cvCreateMat(ColorHistBins, 1, CV_32FC1);
	
	
	//视频读取
	int nFrmNum = 0;
	if(!(pCapture = cvCaptureFromFile("sheltered_chicken.avi")))
	{
		std::cout<<"cannot open video:"<<argv[1]<<"\n";
		return -2;
	}

	//CvVideoWriter* writer = cvCreateVideoWriter("out_effect_of_sheltered_chicken.avi", -1, 29, cvSize(320, 240), 1);
	
 	while(pFrame = cvQueryFrame(pCapture))
	{
		nFrmNum++;

		if(nFrmNum==1)
		{			
			//先创建目标图像
			cvSetImageROI(pFrame, cvRect(state_prediction.x - a + 1, state_prediction.y - b + 1, 2*a-1, 2*b-1));
			ModelColorHistMat = CalcColorHist(pFrame, ModelColorHistMat);

			cvResetImageROI(pFrame);
			pFrame = rectangle_drawing(pFrame, state_prediction, cvSize(a, b));
			cvShowImage("video", pFrame);
			
			//////////////////////////////////////////
			///////根据目标初始位置初始化粒子组//////
			//////////////////////////////////////////
			//chicken.avi
			//LB->data.fl[0] = 105.0f; // lb on data
			//UB->data.fl[0] = 125.0f; // ub on data
			//LB->data.fl[1] = 55.0f; // lb on data
			//UB->data.fl[1] = 75.0f; // ub on data

			//chicken2.avi
			//LB->data.fl[0] = 160.0f; // lb on data
			//UB->data.fl[0] = 180.0f; // ub on data
			//LB->data.fl[1] = 80.0f; // lb on data
			//UB->data.fl[1] = 100.0f; // ub on data

			//sheltered_chicken.avi
			LB->data.fl[0] = 60.0f; // lb on data
			UB->data.fl[0] = 80.0f; // ub on data
			LB->data.fl[1] = 90.0f; // lb on data
			UB->data.fl[1] = 110.0f; // ub on data

			//shortvideo.avi
			//LB->data.fl[0] = 143.0f; // lb on data
			//UB->data.fl[0] = 163.0f; // ub on data
			//LB->data.fl[1] = 170.0f; // lb on data
			//UB->data.fl[1] = 190.0f; // ub on data

			//pedmovie.avi
			//LB->data.fl[0] = 270.0f; // lb on data
			//UB->data.fl[0] = 290.0f; // ub on data
			//LB->data.fl[1] = 25.0f; // lb on data
			//UB->data.fl[1] = 45.0f; // ub on data

			cvConDensInitSampleSet(ConDens, LB, UB);
			
 			cvWaitKey(); 

		}
		else 
		{
			//cvWaitKey(0);

			state_prediction = PF_result(pFrame, ConDens, state_prediction, vx, vy, ModelColorHistMat, cvSize(a, b), steps, rng, &shelter);

			//draw a rectangle in a position
			pFrame = rectangle_drawing(pFrame, state_prediction, cvSize(a, b));

			//cvWriteFrame(writer, pFrame);

			//颜色直方图更新
			//ColorModelUpdate(dsthist, prediction_hist, histnum, cvSize(a, b));

			cvShowImage("video", pFrame);

			if( cvWaitKey(1) >= 0 )			//如果有按键事件,则跳出循环
				break;							//此等待也为cvShowImage函数提供时间完成显示
												//等待时间可以根据CPU速度调整				
		}
	} 
	//std::cout<<"ShelteredFrameNum="<<ShelteredFrameNum<<"\n";
	//std::cout<<"UnshelteredFrameNum="<<UnshelteredFrameNum<<"\n";
	cvWaitKey();
	//销毁窗口
	cvDestroyWindow("video");
	//释放图像指针
	cvReleaseImage(&pFrame);
	cvReleaseCapture(&pCapture);
		
	return 0;
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -