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


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与Python 3版本和编码的对比
Feb 14 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
详解Python3 pickle模块用法
Sep 16 Python
Java文件与类动手动脑实例详解
Nov 10 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
解决pip install psycopg2出错问题
Jul 09 Python
通过实例简单了解python yield使用方法
Aug 06 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
如何利用python生成MD5并去重
Dec 07 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 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 获取全局变量的代码
2011/04/21 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
python实现名片管理系统
2018/11/29 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
国税会议欢迎词
2014/01/16 职场文书
认购协议书范本
2014/04/22 职场文书
李敖北大演讲稿
2014/05/24 职场文书
欢迎标语大全
2014/06/21 职场文书
先进工作者申报材料
2014/12/23 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
浅析Django接口版本控制
2021/06/26 Python