树莓派+摄像头实现对移动物体的检测


Posted in Python onJune 22, 2019

在上一篇文章中实现了树莓派下对摄像头的调用,有兴趣的可以看一下:python+opencv实现摄像头调用的方法

接下来,我们将使用python+opencv实现对移动物体的检测

一、环境变量的配置

我们可以参照上一篇文章对我们的树莓派进行环境的配置

当我们将cv2的库安装之后,就可以实现对摄像头的操作

二、摄像头的连接

在此实验中,我使用的为usb摄像头

当我们连接摄像头之后,终端输入

ls /dev/video*

如果终端提示如下:

树莓派+摄像头实现对移动物体的检测

则表示摄像头连接成功

三、编码实现对移动物体的检测

使用python编写程序,实现对移动物体的检测,代码如下

#encoding=utf-8
import RPi.GPIO as GPIO
import cv2
import time
import os
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)
 
camera = cv2.VideoCapture(0)
if camera is None:
 print('please connect the camera')
 exit()
 
fps = 30 
pre_frame = None
 
led = False
 
while True:
 start = time.time()
 res, cur_frame = camera.read()
 if res != True:
 break
 end = time.time()
 seconds = end - start
 if seconds < 1.0/fps:
 time.sleep(1.0/fps - seconds)
 
 cv2.namedWindow('img',0);
 #cv2.imshow('img', cur_frame)
 key = cv2.waitKey(30) & 0xff
 if key == 27:
 break
 
 gray_img = cv2.cvtColor(cur_frame, cv2.COLOR_BGR2GRAY)
 gray_img = cv2.resize(gray_img, (500, 500))
 gray_img = cv2.GaussianBlur(gray_img, (21, 21), 0)
 
 if pre_frame is None:
 pre_frame = gray_img
 else:
 img_delta = cv2.absdiff(pre_frame, gray_img)
 thresh = cv2.threshold(img_delta, 25, 255, cv2.THRESH_BINARY)[1]
 thresh = cv2.dilate(thresh, None, iterations=2)
 
 contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
 for c in contours:
  if cv2.contourArea(c) < 1000:
  continue
  else:
 (x,y,w,h) = cv2.boundingRect(c)
 cv2.rectangle(cur_frame,(x,y),(x+w,y+h),(0,255,0),2)
 
 print("something is moving!!!")
 led = True
 if led == True:
 for i in range(30):
 GPIO.output(18,GPIO.HIGH)
 time.sleep(0.03)
 GPIO.output(18,GPIO.LOW)
 time.sleep(0.03)
  break
 
 cv2.imshow('img', cur_frame) 
 pre_frame = gray_img
 
camera.release()
cv2.destroyAllWindows()

我的树莓派终端不能显示中文,因此会出现乱码

Ubuntu下的运行结果如下

树莓派+摄像头实现对移动物体的检测

树莓派下执行结果如下:

树莓派+摄像头实现对移动物体的检测

此外,在检测物体移动的同时,添加了led闪烁以及框选移动部分的功能,led安装方法请移步之前的博客

文章参考链接:OpenCV检测场景内是否有移动物体

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
从零学Python之入门(二)基本数据类型
May 25 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Python基于win32ui模块创建弹出式菜单示例
May 09 Python
Python 函数返回值的示例代码
Mar 11 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Django实现跨域的2种方法
Jul 31 Python
elasticsearch python 查询的两种方法
Aug 04 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
python线程join方法原理解析
Feb 11 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
Python数据结构与算法(几种排序)小结
Jun 22 #Python
python+opencv实现摄像头调用的方法
Jun 22 #Python
python算法与数据结构之冒泡排序实例详解
Jun 22 #Python
分析运行中的 Python 进程详细解析
Jun 22 #Python
机器学习实战之knn算法pandas
Jun 22 #Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 #Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 #Python
You might like
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
如何打开php的gd2库
2017/02/09 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
详解json在php中的应用
2018/09/30 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
python中通过预先编译正则表达式提高效率
2017/09/25 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python实现键盘输入的实操方法
2019/07/16 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
2014年中学生检讨书大全
2014/10/09 职场文书
县委务虚会发言材料
2014/10/20 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书