OpenCV实现智能视频监控
本文实例为大家分享了OpenCV实现智能视频监控的具体代码,供大家参考,具体内容如下
之前在做毕设的时候网上找个完整的实现代码挺麻烦的,自己做完分享一下
因为代码较为简单,没有将代码分开写在不同文件,有需要自己整合下哈
使用环境VisualStudio2010和OpenCV2.4.9
#include#include #include usingnamespacestd; usingnamespacecv; intvideoplay(); voidon_Trackbar(int,void*); char*str_gettime(); intbSums(Matsrc); charg_str[17]; intg_nNum=0;//图片名称 intg_nDelay=0; intg_npic=0; Matg_filpdstMat; intg_pointnum=1000;//设置像素点阈值生成图片 intg_pixel=0;//像素点 intmain() { VideoCapturecapture(0); //视频输出VideoWriter CvVideoWriter*outavi=NULL; //VideoWriteroutavi; //outavi.open("sre.avi",-1,5.0,Size(640,480),true); outavi=cvCreateVideoWriter("录像.avi",-1,5.0,cvSize(640,480),1); namedWindow("摄像头",WINDOW_AUTOSIZE); namedWindow("移动轨迹",WINDOW_AUTOSIZE); IplImage*pcpframe=NULL; Mattempframe,currentframe,preframe,cpframe; Matframe,jpg; intframenum=0; //读取一帧处理 while(1) { if(!capture.isOpened()) { cout<<"读取失败"< >frame;//读取摄像头把每一帧传给frame frame.copyTo(cpframe);//把frame赋给cpframe,不影响frame tempframe=frame;//把frame赋给tempframe,影响frame flip(tempframe,g_filpdstMat,1);//水平翻转图像 pcpframe=&IplImage(cpframe);//为了释放窗口,把Mat转化为IplImage使用 //cpframe=cvarrToMat(pcpframe); //ipl转化矩阵pBinary=&IplImage(Img) //7帧截取一次录入视频,频繁截取运转不过来 if(framenum%7==0) { //录像写入 cvWriteFrame(outavi,pcpframe); } //判断帧数,若为第一帧,把该帧作为对比帧 //若大于等于第二帧,则进行帧差法处理 framenum++; if(framenum==1) { cvtColor(g_filpdstMat,preframe,CV_BGR2GRAY); } if(framenum>=2) { cvtColor(g_filpdstMat,currentframe,CV_BGR2GRAY); //灰度图 absdiff(currentframe,preframe,currentframe);//帧差法 threshold(currentframe,currentframe,30,255.0,CV_THRESH_BINARY); //二值化 erode(currentframe,currentframe,Mat());//腐蚀 dilate(currentframe,currentframe,Mat());//膨胀 g_pixel=bSums(currentframe);//调用函数bSums,计算白色像素点,赋值给g_pixel //小延迟后输出当前像素点数值,防止数据刷太快看不清 g_nDelay++; if(g_nDelay>5) { cout<<"当前白色像素点:"< >frame; if(frame.empty()) { break; } cvNamedWindow("视频",CV_WINDOW_AUTOSIZE); imshow("视频",frame); waitKey(30); } cvDestroyWindow("视频"); return0; } //滑轨设定阈值判定是否保存当前摄像头图片 voidon_Trackbar(int,void*) { //保存来人图片 if(g_pixel>g_pointnum) { g_npic++; if(g_npic>5)//为了避免风吹草动,小延迟之后才保存图片 { //保存图片 cout< ::iteratorit=src.begin (); Mat_ ::iteratoritend=src.end (); for(;it!=itend;++it) { if((*it)>0)counter+=1;//二值化后,像素点是0或者255 } returncounter; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。