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


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中文乱码的解决方法
Nov 04 Python
Python编程中装饰器的使用示例解析
Jun 20 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
详解Python并发编程之创建多线程的几种方法
Aug 23 Python
浅析Python3 pip换源问题
Jan 06 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Pycharm调试程序技巧小结
Aug 08 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 Python
python实现双链表
May 25 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如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
python try except 捕获所有异常的实例
2018/10/18 Python
softmax及python实现过程解析
2019/09/30 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
python简单实现9宫格图片实例
2020/09/03 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
关于Java String的一道面试题
2013/09/29 面试题
2013年入党人员的自我鉴定
2013/10/25 职场文书
新领导上任欢迎词
2014/01/13 职场文书
小学敬老月活动方案
2014/02/11 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
入党现实表现材料
2014/12/23 职场文书
课程设计感想范文
2015/08/11 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
详解Python类和对象内容
2021/06/22 Python
基于Python实现流星雨效果的绘制
2022/03/18 Python
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js