之前在做毕设的时候网上找个完整的实现代码挺麻烦的,自己做完分享一下

因为代码较为简单,没有将代码分开写在不同文件,有需要自己整合下哈

使用环境Visual Studio 2010 和 OpenCV 2.4.9

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <ctime>
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);//视频输出VideoWriterCvVideoWriter* 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;//读取摄像头把每一帧传给frameframe.copyTo(cpframe);//把frame赋给cpframe,不影响frametempframe = frame;//把frame赋给tempframe,影响frameflip(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<< "当前白色像素点:" <<g_pixel << endl;cout << "按ESC退出" << endl;g_nDelay = 0;}//创建像素点滑轨createTrackbar("像素点:","移动轨迹",&g_pointnum, 20000,on_Trackbar);on_Trackbar(0, 0);//调用回调函数//显示图像  imshow("摄像头", g_filpdstMat);imshow("移动轨迹", currentframe);}//把当前帧保存作为下一次处理的前一帧cvtColor(g_filpdstMat, preframe, CV_BGR2GRAY);//判断退出,并销毁录像窗口,否则下一步录像无法打开if((char)waitKey(10) == 27){cvReleaseVideoWriter(&outavi);break;}}//end while  while(1){//显示提示窗口jpg = imread("模式选择.jpg", 1);imshow("模式选择",jpg);//设置key选择操作char key;key = waitKey(0);if(key == 'p' || key == 'P')//播放视频videoplay();if(key == 'q' || key == 'Q')//退出break;}return 0;
}//打开录像
int videoplay()
{VideoCapture video("录像.avi");if(!video.isOpened()){fprintf(stderr,"打开失败\n");return false;}while(1){Mat frame;video>>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 << "当前白色像素点:" <<g_pixel << endl;cout << "按ESC退出" << endl;cout << endl;g_npic = 0;}}
}//获取当前日期
char* str_gettime()
{char tmpbuf[10];//从tz设置时区环境变量_tzset();//时间函数//显示当前日期_strdate(tmpbuf);g_str[0] = tmpbuf[6];g_str[1] = tmpbuf[7];g_str[2] = tmpbuf[0];g_str[3] = tmpbuf[1];g_str[4] = tmpbuf[3];g_str[5] = tmpbuf[4];_strtime(tmpbuf);//时分秒g_str[6] = tmpbuf[0];g_str[7] = tmpbuf[1];g_str[8] = tmpbuf[3];g_str[9] = tmpbuf[4];g_str[10] = tmpbuf[6];g_str[11] = tmpbuf[7];//规定图片jpg格式g_str[12] = '.';g_str[13] = 'j';g_str[14] = 'p';g_str[15] = 'g';g_str[16] = '\0';//显示获取图像时间printf("生成图片:%s\n", g_str);return g_str;}int bSums(Mat src)
{int counter = 0;//迭代器访问像素点Mat_<uchar>::iterator it = src.begin<uchar>();Mat_<uchar>::iterator itend = src.end<uchar>();  for (; it!=itend; ++it){if((*it)>0) counter+=1;//二值化后,像素点是0或者255}           return counter;
}

关于OpenCV的智能视频监控实现代码相关推荐

  1. 智能视频监控分析人员行为着装分析 OpenCv

    智能视频监控分析人员行为着装分析通过OpenCv+yolo网络深度学习技术对现场人员行为着装分实时分析检测.我们选择当下YOLO最新的卷积神经网络YOLOv5来进行行为和着装识别检测.YOLOv5是完 ...

  2. 深度学习-智能视频监控

    深度学习-智能视频监控 Deep Surveillance with Deep Learning – Intelligent Video Surveillance 原文地址: https://data ...

  3. android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现

    摘要: 在互联网飞速发展和移动互联网强势崛起的时代,科技产品服务于普通生活是新兴行业必然的发展趋势;监控系统是物联网时代各个领域必然争取的可控制系统.随着无线技术和移动终端设备的高歌猛进,移动终端智能 ...

  4. 中国馆智能视频监控系统

    中国馆智能视频监控系统涉及100多个智能视频分析点(含高清摄像机.智能跟踪球机),在整个世博园区,无论是采用高清产品还是智能跟踪球机,中国 馆的数量均为各场馆之最;同时,系统从前端视频采集,到后端分析 ...

  5. 计算道路超高lisp_5G+AI超高清智能视频监控将迎来增长期

    在安防行业5G+AI赋能下,高清视频将为安防行业带来重要的发展机遇期. 5G具有增强移动宽带.高可靠低时延和广覆盖大连接的优势,使AI能与物联网融为一体. AI和5G近80%的典型应用是重叠的,5G能 ...

  6. 基于EasyDarwin流媒体云平台的智能视频监控系统框架

    基于EasyDarwin流媒体云平台的智能视频监控系统框架 EasyDarwin云平台作为国内较有影响力的开源流媒体平台,集流媒体分发,录像,信令交互为一体,目前已经被广泛应用到监控互联网各个领域:从 ...

  7. 基于SkeyeVSS综合安防监控视频云平台实现智能视频监控系统解决方案

    智能视频监控系统 智能视频监控系统是指采用图像处理.模式识别和计算机视觉技术,通过在监控系统中增加智能视频分析模块,借助计算机强大的数据处理能力过滤掉视频画面无用的或干扰信息.自动识别不同物体,分析抽 ...

  8. 数字技术使智能视频监控超越传统模拟系统

    2006-09-20 15:45:02 >!-- Inject Script Filtered --< >!-- Inject Script Filtered --< > ...

  9. 低成本、云边端、软硬件一体化智能视频监控解决方案

    背景 智能视频监控是利用计算机视觉技术对视频信号进行处理.分析和理解,在不需要人为干预的情况下,通过对序列图像自动分析对监控场景中的变化进行定位.识别和跟踪,并在此基础上分析和判断目标的行为,能在异常 ...

最新文章

  1. AI一分钟 | 万达网科裁员95%高达5000余人,被爆下一步将转型AI; 英伟达放话了:研究人员放心用,不更新驱动就没啥事儿
  2. 互联网高并发架构技术实践
  3. 数据库(四)之数据库表管理
  4. 金融业如何更好地利用大数据实现突破性变革?(实例解读)
  5. 带标签的循环语句、switch
  6. java,list遍历赋值
  7. matlab读入txt数据_教程合集 | MATLAB文件读写(以nc与txt为例)
  8. 同步和原子性---多线程学习笔记(四)
  9. Linux网络编程服务器模型选择之循环服务器
  10. leetcode304. 二维区域和检索 - 矩阵不可变
  11. C++中operator的两种用法
  12. 隐写术写在简历上面_隐写术用纯英语解释
  13. 华为oj题库分苹果JAVA_华为OJ机试训练(一)
  14. linux 查看设备 usb设备驱动程序,Linux USB设备驱动程序未被探测
  15. 参与esri用户大会感想
  16. Xmodem/Ymodem/Zmodem协议详解
  17. 账单---Grid++Report报表设计器
  18. c++---------虚函数及继承(一)
  19. python怎么输入空行_python如何添加空行
  20. easyexcel的导出

热门文章

  1. 计算机应用技术博士,全国新增所大学计算机应用技术博士点
  2. shellmad-18_C++新特性 智能指针的简易实现及添加模板
  3. 天下苦微信久矣,头条欲抢滩登陆
  4. C++如何实现猜数游戏
  5. 基于听觉特性的Mel频率倒谱分析
  6. 数据采集-呼吸心跳信号检测方法(二)
  7. 红米路由器ac2100怎样设置ipv6_红米(Redmi)路由器AC2100手机怎么设置? | 192路由网...
  8. Java语言基础,面向对象
  9. 四格漫画《MUXing》——他们在干什么
  10. Linux下eMMC,SD卡格式化和分区管理