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


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判断、获取一张图片主色调的2个实例
Apr 10 Python
Python实现子类调用父类的方法
Nov 10 Python
Python自动生产表情包
Mar 17 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Django中ORM外键和表的关系详解
May 20 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
python构造IP报文实例
May 05 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字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
php操作redis缓存方法分享
2015/06/03 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
在python中画正态分布图像的实例
2019/07/08 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
Sony C++笔试题
2013/03/10 面试题
私有程序集与共享程序集有什么区别
2013/04/05 面试题
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
计算机应用毕业生自荐信
2013/10/23 职场文书
优秀护士获奖感言
2014/02/20 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
安全横幅标语
2014/06/09 职场文书
员工趣味活动方案
2014/08/27 职场文书
《检阅》教学反思
2016/02/22 职场文书