📄 color_update tracking.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 + -