1 #include

2 #include

3 #include //时间函数头

4 #include "opencv.hpp"

5

6 /**7 * A program to detect motion in front of an USB camera using OpenCV.8 **/

9

10 int main(int argc, char **argv) {11 int detectThreshold = 19; //运动检测预设值(时间)

12 if (argc >= 2) { //判断参数是否充足判断

13 detectThreshold = atoi(argv[1]);14 printf("=== Motion detection threshold has been set to: [%d] ===\n", detectThreshold);15 }16

17 /*init 摄影机*/

18 CvCapture* pCapture = cvCreateCameraCapture(0);19 if (NULL ==pCapture) {20 fprintf(stderr, "Can't initialize webcam!\n");21 return 1;22 }23 cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_WIDTH, 640);24 cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_HEIGHT, 480);25 cvSetCaptureProperty(pCapture, CV_CAP_PROP_BRIGHTNESS, 20);26 cvSetCaptureProperty(pCapture, CV_CAP_PROP_CONTRAST, 10);27

28 /*图像指针*/

29 IplImage *pFrameA = cvQueryFrame(pCapture); //从摄像头或者文件中抓取并返回一帧

30 IplImage *pFrameB = cvCreateImage(cvSize(pFrameA->width, pFrameA->height), pFrameA->depth, pFrameA->nChannels); //创建图像((矩形框大小),颜色深度,通道)31 //就是直接把pFrameB这个图像复制给dst,不用给 pFrameDiff 特地开辟内存空间了

32 IplImage *pFrameDiff =cvCloneImage(pFrameB);33

34 int nDims = 256;35 float hRangesArr[] = {0, 255};36 float* hRanges =hRangesArr;37 /*直方图,表上数字图像中亮度分布的一种图,标绘了每个像素的亮度数(可以使用直方图对图像进行二值化,通过计算差异图像的直方图,可以知道这两附图有没有差异*/

38 IplImage *pGrayscaleImage =NULL;39 CvHistogram *pHist = cvCreateHist(1, &nDims, CV_HIST_ARRAY, &hRanges, 1);40 float fMaxValue = 0.0;41

42 time_t ts = 0; //用于记录当前时间戳和防止1次触发多次监测检测

43 while(true) {44 pFrameA = cvQueryFrame(pCapture); //从摄像头或者文件中抓取并返回一帧

45 if(!pFrameA){ //判断是否成功采集

46 fprintf(stdout,"Can't grab images!\n");47 break;48 }49 cvAbsDiff(pFrameB,pFrameA,pFrameDiff); //计算两幅图像的差异

50 cvCopy(pFrameA,pFrameB); //复制图像,第一个参数是源与第二目标51 //实现了8位深的灰度图像

52 pGrayscaleImage = cvCreateImage(cvGetSize(pFrameDiff),IPL_DEPTH_8U,1);53 //void cvCvtColor( const CvArr* src, CvArr* dst, int code );54 //src 输入的 8-bit,16-bit或 32-bit单倍精度浮点数影像。55 //dst 输出的8-bit, 16-bit或 32-bit单倍精度浮点数影像。56 //code 色彩空间转换的模式,该code来实现不同类型的颜色空间转换。比如CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将图片从RGB空间转换为HSV空间。其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将RGB值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。

57 cvCvtColor(pFrameDiff, pGrayscaleImage, CV_BGR2GRAY);58 cvCalcHist(&pGrayscaleImage, pHist, 0, 0);59

60 fMaxValue = 0.0;61 //找到直方图中最大最小直方块,以及他们的位置,并保存到 fMaxValue 中

62 cvGetMinMaxHistValue(pHist, 0, &fMaxValue, 0, 0);63 //用于对直方图的比例缩放

64 cvConvertScale(pHist->bins, pHist->bins, (fMaxValue ? (255.0 / fMaxValue) : 0.0), 0);65 //检查是否有运动状态

66 double dRealtimeVal = cvGetReal1D(pHist->bins, 10);67 if (dRealtimeVal > detectThreshold) { //触发

68 time_t currentTimestamp =time(NULL);69 if (currentTimestamp - ts >= 1) { //对时间戳进行判断

70 ts =currentTimestamp;71 printf("Motion detected @ %s", ctime(&currentTimestamp));72 }73 }74 cvReleaseImage(&pGrayscaleImage); //释放内存

75 pGrayscaleImage =NULL;76

77 cvWaitKey(10); //等待n毫秒

78 }79 //停止捕获图像和释放资源

80 cvReleaseCapture(&pCapture);81 cvReleaseHist(&pHist);82 cvReleaseImage(&pFrameA);83 cvReleaseImage(&pFrameB);84 cvReleaseImage(&pFrameDiff);85

86 pCapture =NULL;87 pHist =NULL;88 pFrameA =NULL;89 pFrameB =NULL;90 pFrameDiff =NULL;91

92 return 0;93 }

姿态检测 树莓派_3.使用树莓派控制摄像头采集视频及运动检测相关推荐

  1. 教你用Python控制摄像头录制视频~

    导语 ​Python如何下载网页上的图片呢? 哈喽哈喽铁汁萌~今天小编给大家分享另一个Python应用小程序,就是:用Python控制摄像头录制视频! 感兴趣的小伙伴耐心往下看哦

  2. OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测

    我们本节学习如何利用 OpenCV 中的 VideoCapture 类,来对视频进行读取显示,以及调用摄像头. VideoCapture 它提供了从摄像机或视频文件捕获视频的 C++ 接口, 作用是从 ...

  3. [转]GStreamer资料(摄像头采集,视频保存,远程监控)DVR

    http://blog.csdn.net/wzwxiaozheng/archive/2010/12/26/6099397.aspx GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒 ...

  4. GStreamer资料(摄像头采集,视频保存,远程监控)DVR

    转载自:http://blog.chinaunix.net/uid-10747583-id-282761.html http://blog.csdn.net/wzwxiaozheng/archive/ ...

  5. RK3568平台开发系列讲解(视频篇)摄像头采集视频的相关配置

  6. ECCV 2018丨YOLO遇上OpenPose,近200FPS的高帧数多人姿态检测

    伊瓢 发自 凹非寺  量子位 报道 | 公众号 QbitAI 在高帧数下,如何实现人体姿态检测? 下面这条刷屏的twitter视频给出了答案. 这是今年ECCV上的一篇名为<Pose Propo ...

  7. linux 远程挂载摄像头_linux实现HUB分接两个摄像头读取视频

    当进行多个USB视频捕捉时,不是每个USB插口都能插上一个USB摄像头.如果这样做的话,结果可能是屏幕一片空白,什么都没有,因为摄像头初始化会出错,导致程序不可正常运行. 这里首先涉及到USB的传输速 ...

  8. 毛星云opencv入门调用摄像头采集图像

    #include<opencv2/opencv.hpp>#include<iostream> using namespace std; using namespace cv; ...

  9. 姿态检测 树莓派_怎样在树莓派上轻松实现深度学习目标检测?

    原标题:怎样在树莓派上轻松实现深度学习目标检测? 雷锋网按:本文为 AI 研习社编译的技术博客,原标题 How to easily Detect Objects with Deep Learning ...

最新文章

  1. jquery判断方法是否存在_判断图中是否有环的三种方法
  2. CV之FR:计算机视觉之人脸识别(Face Recognition)方向的简介、使用方法、案例应用之详细攻略
  3. Boost:ping的测试程序
  4. Android中异步任务AsyncTask的使用
  5. agv系统介绍_AGV地面控制系统介绍
  6. 【XML】XML语法格式提要
  7. Android导航栏ActionBar的具体分析
  8. JavaScript的三大高阶函数
  9. jsp mysql模板_jsp的分页查询的代码(mysql数据库)
  10. velocity java 静态方法_java – 如何访问Velocity模板中的静态成员?
  11. 站点技术---301重定向
  12. 64位程序怎么判断指针是否有效_和微信大佬聊了一夜,他告诉我为什么指针被誉为 C 语言灵魂?...
  13. 假短信截图在线生成器_工资到账提醒短信原来可以这样玩
  14. 不要以为过了技术面就安全了,HR面也会挂人的!!
  15. PS常用快捷键 初学者必看
  16. ubuntu16.04 禁用Guest用户
  17. OpenCV实现击中击不中变换和形态学细化
  18. 计蒜客T1003输出字符菱形
  19. 黑马JavaWeb全功能综合案例(element-ui+mybatis+Vue+ajax)
  20. C/C++的内存分配?栈和堆的区别?为什么栈快?

热门文章

  1. UCINET 社会网络分析工具
  2. NOIP2016普及组第三题——海港
  3. mysql2阶段提交具体实现_ShardingSphere 4.x 分布式事务之实现原理
  4. python有强大吗_python有多强大
  5. python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流
  6. 耳机是怎么传输声音的_win7电脑耳机有声音外放没声音怎么办
  7. python在mac上运行不用装模块_MAC OSX使用Python安装mysql模块问题
  8. maven package自己主动部署包
  9. MySQL中地理位置数据扩展geometry的使用心得
  10. C#语言-07.文件操作