📄 pftrackdlg.cpp
字号:
{
pwnd->SetWindowText("请勿践踏草坪!");
}
//在路上
if ((videownd.center[videownd.count-1][1]<200)&&(videownd.center[videownd.count-1][1]>100))
{
if (distant<=25)
{
pwnd->SetWindowText("此人站在原地未动");
}
else
{
if (velocity<1.0)
{
pwnd->SetWindowText("此人在散步");
}
else{
if (velocity>4.0)
{
pwnd->SetWindowText("此人在快跑");
}
else
{
pwnd->SetWindowText("此人正在以常速前进");
}
}
}
}
//在车场内
if (videownd.center[videownd.count-1][1]<100)
{
if( (videownd.center[videownd.count-1][1]<90)&&(videownd.center[videownd.count-1][1]>20))
{
if (videownd.center[videownd.count-1][0]<80&&videownd.center[videownd.count-1][0]>20)
{
pwnd->SetWindowText("此人进入了第一辆车中");
}
else
{
if (videownd.center[videownd.count-1][0]<180&&videownd.center[videownd.count-1][0]>120)
{
pwnd->SetWindowText("此人进入了第二辆车中");
}
else
{
if (videownd.center[videownd.count-1][0]<280&&videownd.center[videownd.count-1][0]>220)
{
pwnd->SetWindowText("此人进入了第三辆车中");
}
else
{
pwnd->SetWindowText("此人进入了停车区");
}
}
}
}
else
{
pwnd->SetWindowText("此人进入了停车区");
}
}
}
void CPfTrackDlg::OnOpenFile()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE, _T("*.avi"), "",
OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
"AVI files (*.avi) |*.avi|All Files (*.*)|*.*||",NULL);
CString strFileName;
char title[]= {"打开视频文件"};
dlg.m_ofn.lpstrTitle= title;
if (dlg.DoModal() == IDOK) {
strFileName= dlg.GetPathName();
}
IplImage* source = NULL;
CvCapture* capture = NULL;
capture= cvCaptureFromFile(strFileName);
source = cvQueryFrame(capture);
if(!source)
{
printf("bad video \n");
exit(0);
}
/////////////////////////
//定义视频窗口,响应鼠标信息
/* cvNamedWindow( "CamShiftDemo", 1 );
cvSetMouseCallback( "CamShiftDemo", on_mouse, 0 );
for (;;)
{
IplImage* frame = 0;
int i, bin_w, c;
frame = cvQueryFrame( capture );
if( !frame )
break;
if (!imagecam)
{
imagecam = cvCreateImage( cvGetSize(frame), 8, 3 );
imagecam->origin = frame->origin;
hsv = cvCreateImage( cvGetSize(frame), 8, 3 );
hue = cvCreateImage( cvGetSize(frame), 8, 1 );
mask = cvCreateImage( cvGetSize(frame), 8, 1 );
backproject = cvCreateImage( cvGetSize(frame), 8, 1 );
hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 );
histimg = cvCreateImage( cvSize(320,200), 8, 3 );
cvZero( histimg );
}
cvCopy( frame, imagecam, 0 );
cvCvtColor( imagecam, hsv, CV_BGR2HSV );
if (track_object)
{
int _vmin = vmin, _vmax = vmax;
cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),
cvScalar(180,256,MAX(_vmin,_vmax),0), mask );
cvSplit( hsv, hue, 0, 0, 0 );
if (track_object<0)
{
float max_val = 0.f;
cvSetImageROI( hue, selection );
cvSetImageROI( mask, selection );
cvCalcHist( &hue, hist, 0, mask );
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );
cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 );
cvResetImageROI( hue );
cvResetImageROI( mask );
track_window = selection;
track_object = 1;
cvZero( histimg );
bin_w = histimg->width / hdims;
for (i=0;i<hdims;i++)
{
int val = cvRound( cvGetReal1D(hist->bins,i)*histimg->height/255 );
CvScalar color = hsv2rgb(i*180.f/hdims);
cvRectangle( histimg, cvPoint(i*bin_w,histimg->height),
cvPoint((i+1)*bin_w,histimg->height - val),
color, -1, 8, 0 );
}
}
cvCalcBackProject( &hue, backproject, hist );
cvAnd( backproject, mask, backproject, 0 );
cvCamShift( backproject, track_window,
cvTermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ),
&track_comp, &track_box );
track_window = track_comp.rect;
if( backproject_mode )
cvCvtColor( backproject, imagecam ,CV_GRAY2BGR );
if( imagecam->origin )
track_box.angle = -track_box.angle;
cvEllipseBox( imagecam, track_box, CV_RGB(255,0,0), 3, CV_AA, 0 );
}
if( select_object && selection.width > 0 && selection.height > 0 )
{
cvSetImageROI( imagecam, selection );
cvXorS( imagecam, cvScalarAll(255), imagecam, 0 );
cvResetImageROI( imagecam );
}
cvRectangle(imagecam, cvPoint(imagecam->width/3,imagecam->height/5), cvPoint(imagecam->width*2/3,imagecam->height*4/5),
CV_RGB(128,128,128),1, 8, 0);
cvShowImage( "CamShiftDemo", imagecam );
c = cvWaitKey(10);
if( c == 27 )
break;
switch( c )
{
case 'b':
backproject_mode ^= 1;
break;
case 'c':
track_object = 0;
cvZero( histimg );
break;
default:
;
}
//Sleep(50);
}*/
IplImage *image = 0;
IplImage* HSV = 0;
cvNamedWindow("CondensationDemo", CV_WINDOW_AUTOSIZE );
////////////////////////////////////////
int DP=2; //状态向量的维数
int MP=2; //测量向量的维数
int SamplesNum=200;
CvConDensation* ConDens=cvCreateConDensation( DP, MP, SamplesNum );
CvMat* lowerBound;
CvMat* upperBound;
lowerBound = cvCreateMat(2, 1, CV_32F);
upperBound = cvCreateMat(2, 1, CV_32F);
cvmSet( lowerBound, 0, 0, 0.0 ); cvmSet( upperBound, 0, 0, 320.0 );//////////////////
cvmSet( lowerBound, 1, 0, 0.0 ); cvmSet( upperBound, 1, 0, 240.0 );////////////////
cvConDensInitSampleSet(ConDens, lowerBound, upperBound);
for(int i=0; i < SamplesNum; i++){
ConDens->flSamples[i][0]+=160.0;
ConDens->flSamples[i][1]+=120.0;
}
ConDens->DynamMatr[0]=1.0;ConDens->DynamMatr[1]=0.0;
ConDens->DynamMatr[2]=0.0;ConDens->DynamMatr[3]=1.0;
//////////////////////////////////////
int c;
for(;;){
IplImage* frame = 0;
int X,XX,YY,Y;
int H,S,V;
int sumx=0;
int sumy=0;
frame = cvQueryFrame( capture );
if( !frame ){
break;
}
if( !image ){
image = cvCreateImage( cvGetSize(frame), 8, 3 );
image->origin = frame->origin;
HSV = cvCreateImage( cvGetSize(frame), 8, 3 );
HSV->origin = frame->origin;
}
cvCopy( frame, image, 0 );
cvCvtColor(image ,HSV , CV_BGR2HSV);
for(int i=0; i < SamplesNum; i++){
X=(int)ConDens->flSamples[i][0];
Y=(int)ConDens->flSamples[i][1];
sumx=sumx+X;
sumy=sumy+Y;
if(X>=0 && X<=320 && Y>=0 && Y<=240){ //320 240
videownd.getpixel(HSV, X, Y, &H, &S, &V);
if(H<=19 && S>=48){
cvCircle(image, cvPoint(X,Y), 4, CV_RGB(255,123,255), 0.5);
ConDens->flConfidence[i]=1.0;
}
else{
ConDens->flConfidence[i]=0.0;
}
}
else{
ConDens->flConfidence[i]=0.0;
}
}
XX=sumx/SamplesNum;
YY=sumy/SamplesNum;
CvPoint pt;
pt.x=XX;
pt.y=YY;
track_box.center.x=XX;
track_box.center.y=YY;
if( image->origin )
{
track_box.angle = -track_box.angle;
}
track_box.size.height=50;
track_box.size.width=150;
cvEllipseBox( image, track_box, CV_RGB(250,0,0), 3, CV_AA, 0 );
cvConDensUpdateByTime(ConDens);
cvShowImage( "CondensationDemo", image );
c = cvWaitKey(10);
if( c == 40 ){
break;
}
CDC *pDC=GetDC();
CvvImage PreviewImage;
//获取对话框的大小
Sleep(20);
}
cvReleaseImage(&image);
cvReleaseImage(&HSV);
cvReleaseCapture( &capture );
cvDestroyWindow("condensation");
}
void CPfTrackDlg::DrawScene()
{
CRect conRect;
//获得ID号为IDC_SHOWPATH的控件的CWND指针
//并使用它获得相应的设备环境
CWnd *pwnd=GetDlgItem(IDC_SHOWANALYSIS);
CDC *pdc=pwnd->GetDC();
//获得该控件的矩形区域
::GetClientRect(pwnd->m_hWnd, conRect);
//将索引值为NULL_BRUSH库对象选进设备环境
pdc->SelectStockObject(NULL_BRUSH);
//设置视口原点
pdc->FillSolidRect(CRect(0,200,320,240),RGB(100,200,0));
pdc->MoveTo(-1,-1);
pdc->LineTo(500,500);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -