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

📄 pftrackdlg.cpp

📁 毕设终于作完了 虽然老师说行为分析做得很没意义
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
	  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 + -