姿态检测 树莓派_3.使用树莓派控制摄像头采集视频及运动检测
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(¤tTimestamp));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.使用树莓派控制摄像头采集视频及运动检测相关推荐
- 教你用Python控制摄像头录制视频~
导语 Python如何下载网页上的图片呢? 哈喽哈喽铁汁萌~今天小编给大家分享另一个Python应用小程序,就是:用Python控制摄像头录制视频! 感兴趣的小伙伴耐心往下看哦
- OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测
我们本节学习如何利用 OpenCV 中的 VideoCapture 类,来对视频进行读取显示,以及调用摄像头. VideoCapture 它提供了从摄像机或视频文件捕获视频的 C++ 接口, 作用是从 ...
- [转]GStreamer资料(摄像头采集,视频保存,远程监控)DVR
http://blog.csdn.net/wzwxiaozheng/archive/2010/12/26/6099397.aspx GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒 ...
- GStreamer资料(摄像头采集,视频保存,远程监控)DVR
转载自:http://blog.chinaunix.net/uid-10747583-id-282761.html http://blog.csdn.net/wzwxiaozheng/archive/ ...
- RK3568平台开发系列讲解(视频篇)摄像头采集视频的相关配置
- ECCV 2018丨YOLO遇上OpenPose,近200FPS的高帧数多人姿态检测
伊瓢 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在高帧数下,如何实现人体姿态检测? 下面这条刷屏的twitter视频给出了答案. 这是今年ECCV上的一篇名为<Pose Propo ...
- linux 远程挂载摄像头_linux实现HUB分接两个摄像头读取视频
当进行多个USB视频捕捉时,不是每个USB插口都能插上一个USB摄像头.如果这样做的话,结果可能是屏幕一片空白,什么都没有,因为摄像头初始化会出错,导致程序不可正常运行. 这里首先涉及到USB的传输速 ...
- 毛星云opencv入门调用摄像头采集图像
#include<opencv2/opencv.hpp>#include<iostream> using namespace std; using namespace cv; ...
- 姿态检测 树莓派_怎样在树莓派上轻松实现深度学习目标检测?
原标题:怎样在树莓派上轻松实现深度学习目标检测? 雷锋网按:本文为 AI 研习社编译的技术博客,原标题 How to easily Detect Objects with Deep Learning ...
最新文章
- jquery判断方法是否存在_判断图中是否有环的三种方法
- CV之FR:计算机视觉之人脸识别(Face Recognition)方向的简介、使用方法、案例应用之详细攻略
- Boost:ping的测试程序
- Android中异步任务AsyncTask的使用
- agv系统介绍_AGV地面控制系统介绍
- 【XML】XML语法格式提要
- Android导航栏ActionBar的具体分析
- JavaScript的三大高阶函数
- jsp mysql模板_jsp的分页查询的代码(mysql数据库)
- velocity java 静态方法_java – 如何访问Velocity模板中的静态成员?
- 站点技术---301重定向
- 64位程序怎么判断指针是否有效_和微信大佬聊了一夜,他告诉我为什么指针被誉为 C 语言灵魂?...
- 假短信截图在线生成器_工资到账提醒短信原来可以这样玩
- 不要以为过了技术面就安全了,HR面也会挂人的!!
- PS常用快捷键 初学者必看
- ubuntu16.04 禁用Guest用户
- OpenCV实现击中击不中变换和形态学细化
- 计蒜客T1003输出字符菱形
- 黑马JavaWeb全功能综合案例(element-ui+mybatis+Vue+ajax)
- C/C++的内存分配?栈和堆的区别?为什么栈快?
热门文章
- UCINET 社会网络分析工具
- NOIP2016普及组第三题——海港
- mysql2阶段提交具体实现_ShardingSphere 4.x 分布式事务之实现原理
- python有强大吗_python有多强大
- python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流
- 耳机是怎么传输声音的_win7电脑耳机有声音外放没声音怎么办
- python在mac上运行不用装模块_MAC OSX使用Python安装mysql模块问题
- maven package自己主动部署包
- MySQL中地理位置数据扩展geometry的使用心得
- C#语言-07.文件操作