重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章给大家分享的是有关使用OpenCV怎么智能视频监控,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创新互联是一家专业提供会宁企业网站建设,专注与网站设计、网站建设、HTML5建站、小程序制作等业务。10年已为会宁众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
#include#include #include using namespace std; using namespace cv; int videoplay(); void on_Trackbar(int ,void*); char* str_gettime(); int bSums(Mat src); char g_str[17]; int g_nNum = 0;//图片名称 int g_nDelay = 0; int g_npic = 0; Mat g_filpdstMat; int g_pointnum = 1000;//设置像素点阈值生成图片 int g_pixel = 0;//像素点 int main() { VideoCapture capture(0); //视频输出VideoWriter CvVideoWriter* outavi = NULL; //VideoWriter outavi; //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; Mat tempframe, currentframe, preframe, cpframe; Mat frame,jpg; int framenum = 0; //读取一帧处理 while (1) { if(!capture.isOpened()) { cout << "读取失败" << endl; return -1; } capture >> 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("视频"); return 0; } //滑轨设定阈值判定是否保存当前摄像头图片 void on_Trackbar(int ,void*) { //保存来人图片 if(g_pixel > g_pointnum) { g_npic++; if(g_npic > 5)//为了避免风吹草动,小延迟之后才保存图片 { //保存图片 cout << endl << endl; cout << "场地异常,警报响应,准备拍照...\a" << endl; imwrite(str_gettime(),g_filpdstMat); cout << "当前白色像素点:" < ::iterator it = src.begin (); Mat_ ::iterator itend = src.end (); for (; it!=itend; ++it) { if((*it)>0) counter+=1;//二值化后,像素点是0或者255 } return counter; }
以上就是使用OpenCV怎么智能视频监控,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。