资源简介

识别视频中的车辆,并画一条界限,超过界限的车画红框,未超过的车画绿框。分成三个车道,分别对超过界限的车辆分别计数。

资源截图

代码片段和文件信息

#include “cv.h“
#include “highgui.h“
#include 
#include 
#include 
#include 
#include 
const double MHI_DURATION = 0.5;
const int N = 3;
const int CONTOUR_MAX_AERA = 800;//最小区域
int last = 0;
int nFrmNum = 0;
bool FindCar=false;
int No[5]={00000};
int sum[4]={0000};

IplImage **buf = 0;// ring image buffer
IplImage *mhi = 0; // MHI: motion history image

struct AvTrackBlock{
int Direction;      //1表示进入区域,0表示离开区域
int framesTracked;  //已经跟踪到车辆的帧数。
int avgX;           //车辆x方向中心
int avgY;           //车辆y方向中心
} TrackBlock[4][5];

void DrawText(IplImage* pImgchar* textCvPoint Point);
void DrawCount(IplImage* pImgint countCvPoint Point);
void AddBlobTrack(IplImage* imgint iCvPoint pt_Rect);
void update_mhi( IplImage* img IplImage* dst int diff_threshold );

int main()
{
IplImage* motion = NULL; 
IplImage* image;
CvCapture* capture = NULL;

capture = cvCaptureFromFile(“F:\\01.avi“);//打开文件
if( !cvGrabframe( capture ))
printf( “Can not open video file %s\n“);
cvNamedWindow( “Motion“ 1 ); //窗口命名
cvNamedWindow( “temp“ 2 ); //窗口命名
cvNamedWindow( “temp2“ 3 ); //窗口命名
cvNamedWindow( “temp3“ 4 ); //窗口命名
// cvNamedWindow( “temp4“ 4 ); //窗口命名
cvMoveWindow(“Motion“ 0 100 );
cvMoveWindow(“temp“ 300 100 );
cvMoveWindow(“temp2“ 650 100 );
cvMoveWindow(“temp3“ 950 100 );
// cvMoveWindow(“temp4“ 1200 100 );
for(int i=0;i<4;i++) //初始化跟踪结构体
for(int j=0;j<5;j++)
{
TrackBlock[i][j].Direction=0;
TrackBlock[i][j].framesTracked=0;
TrackBlock[i][j].avgX=0;
TrackBlock[i][j].avgY=0;
}

 
if( capture )
{
while(image = cvQueryframe(capture))//获取视频
{       
nFrmNum++; 
image = cvRetrieveframe(capture0 );
if(nFrmNum == 1)
{     
motion = cvCreateImage( cvSize(image->widthimage->height) 8 1 );//创建图像
cvZero( motion ); //置0
motion->origin = image->origin; //对其原点      
}
update_mhi( image motion 60 ); //更新
cvShowImage( “Motion“ image ); //显示图像

if( cvWaitKey(10) >= 0 ) //如果等待错过10  则跳出循环
break;
}
cvReleaseCapture( &capture ); //释放捕获
cvDestroyWindow( “Motion“ ); //销毁窗口
}
return 0;
}

//  参数:
//  img – 输入视频帧
//  dst – 检测结果
void  update_mhi( IplImage* img IplImage* dst int diff_threshold )
{
    double timestamp = clock()/100.; // get current time in seconds  
    int i j idx1 idx2;
    uchar val;
    float temp;
int avgX1 = 0;
int avgY1 = 0; 

CvSize size = cvSize(img->widthimg->height); // get current frame size
IplImage* silh;
    /*********************************/IplImage* pyr = cvCreateImage( cvSize((size.width & -2)/2 (size.height & -2)/2) 8 1 );
/*-2补码 11111111 11111111 11111111 11111110   那么size.width & -2就是把最后一位width的最后一位置0,
  下面分析为什么要把最后一位置为0
  如果源图像的width为奇数,则通过和-2相与,最后一位设为0,相当于图像width减小了1,然后再除以2,刚好为源图像分配了一半的width*/
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-01-08 08:03  opencv car2 车辆计数\
     目录           0  2016-01-10 19:40  opencv car2 车辆计数\opencv car2\
     目录           0  2016-01-08 08:03  opencv car2 车辆计数\opencv car2\ipch\
     目录           0  2016-01-08 08:03  opencv car2 车辆计数\opencv car2\ipch\opencv car2-29fcdb31\
     文件    57475072  2015-05-29 10:22  opencv car2 车辆计数\opencv car2\ipch\opencv car2-29fcdb31\opencv car2-8b8a31d.ipch
     目录           0  2016-01-10 19:39  opencv car2 车辆计数\opencv car2\opencv car2\
     文件     7208960  2016-01-10 19:40  opencv car2 车辆计数\opencv car2\opencv car2.sdf
     文件        1254  2015-04-20 23:49  opencv car2 车辆计数\opencv car2\opencv car2.sln
     文件       23552  2015-05-29 10:38  opencv car2 车辆计数\opencv car2\opencv car2.suo
     文件       45568  2016-01-10 19:40  opencv car2 车辆计数\opencv car2\opencv car2.v11.suo
     文件     4343534  2015-04-13 16:15  opencv car2 车辆计数\opencv car2\opencv car2\01.avi
     文件       10555  2015-05-29 10:36  opencv car2 车辆计数\opencv car2\opencv car2\motiondetect2 fenzhen.cpp
     文件       10969  2015-05-13 11:25  opencv car2 车辆计数\opencv car2\opencv car2\motiondetect2 jishu hanshu.cpp
     文件        9288  2015-05-12 22:13  opencv car2 车辆计数\opencv car2\opencv car2\motiondetect2.cpp
     文件        4891  2015-04-23 11:22  opencv car2 车辆计数\opencv car2\opencv car2\opencv   cvCalcOpticalFlowHS.cpp
     文件       32646  2015-04-20 23:50  opencv car2 车辆计数\opencv car2\opencv car2\opencv car2.cpp
     文件        7156  2016-01-10 19:36  opencv car2 车辆计数\opencv car2\opencv car2\opencv car2.vcxproj
     文件         959  2015-05-13 11:38  opencv car2 车辆计数\opencv car2\opencv car2\opencv car2.vcxproj.filters
     文件         143  2015-04-20 17:57  opencv car2 车辆计数\opencv car2\opencv car2\opencv car2.vcxproj.user
     文件       14198  2008-07-12 15:25  opencv car2 车辆计数\opencv car2\opencv car2\OpenVideo.cpp
     目录           0  2016-01-08 08:04  opencv car2 车辆计数\opencv car2\opencv car2\sechost.pdb\
     目录           0  2016-01-08 08:04  opencv car2 车辆计数\opencv car2\opencv car2\sechost.pdb\A88565B0437A42C5A7D3F0FC056501221\
     文件           0  2015-05-14 20:39  opencv car2 车辆计数\opencv car2\opencv car2\sechost.pdb\A88565B0437A42C5A7D3F0FC056501221\sechost.pd_
     文件        3061  2015-05-12 19:50  opencv car2 车辆计数\opencv car2\opencv car2\test.cpp
     文件        2438  2011-10-06 16:08  opencv car2 车辆计数\opencv car2\opencv car2\TrackandIDDlg.h
     目录           0  2016-01-08 08:04  opencv car2 车辆计数\opencv car2\opencv car2\x64\
     目录           0  2016-01-10 19:36  opencv car2 车辆计数\opencv car2\opencv car2\x64\Debug\
     文件        1398  2016-01-10 19:36  opencv car2 车辆计数\opencv car2\opencv car2\x64\Debug\cl.command.1.tlog
     文件       21566  2016-01-10 19:36  opencv car2 车辆计数\opencv car2\opencv car2\x64\Debug\CL.read.1.tlog
     文件         784  2016-01-10 19:36  opencv car2 车辆计数\opencv car2\opencv car2\x64\Debug\CL.write.1.tlog
     文件           2  2015-05-29 10:36  opencv car2 车辆计数\opencv car2\opencv car2\x64\Debug\link-cvtres.read.1.tlog
............此处省略58个文件信息

评论

共有 条评论