介绍
这篇文章主要为大家展示了“树莓派+摄像头如何实现对移动物体的检测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“树莓派+摄像头如何实现对移动物体的检测”这篇文章吧。
<强>一、环境变量的配置强>
我们可以参照上一篇文章对我们的树莓派进行环境的配置
当我们将cv2的库安装之后,就可以实现对摄像头的操作
<强>二、摄像头的连接强>
在此实验中,我使用的为usb摄像头
当我们连接摄像头之后,终端输入
ls /dev/视频*
如果终端提示如下:
则表示摄像头连接成功
<强>三、编码实现对移动物体的检测强>
使用python编写程序,实现对移动物体的检测,代码如下
#=utf - 8编码 import RPi.GPIO  as GPIO import cv2 import 时间 import 操作系统 , GPIO.setmode (GPIO.BCM) GPIO.OUT GPIO.setup(18日) , 时间=camera cv2.VideoCapture (0) if camera  is 没有: ,打印(& # 39;please  connect 从而相机# 39;) ,退出() , 时间=fps 30, 时间=pre_frame 没有 , led =False , while 真正的:=,,start  time.time () ,res, cur_frame =, camera.read () ,if res  !=,真的: ,打破 ,最终获得=,time.time ()=,seconds ,最终获得成功,开始 ,if seconds & lt; 1.0/帧: ,time . sleep (1.0/fps 作用;秒) , ,cv2.namedWindow (& # 39; img # 39;, 0); ,# cv2.imshow (& # 39; img # 39;,, cur_frame)=,,key  cv2.waitKey(30),及0 xff ,if key ==, 27日: ,打破 ,=,,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 没有:=,pre_frame  gray_img ,其他的:=,,img_delta  cv2.absdiff (pre_frame, gray_img)=,,thresh  cv2.threshold (img_delta, 25岁,255年,cv2.THRESH_BINARY) [1]=,,thresh  cv2.dilate(打,,没有,,迭代=2) , 轮廓的不同之处是,hierarchy =, cv2.findContours (thresh.copy (), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) ,for c 轮廓拷贝: if 才能cv2.contourArea (c), & lt;, 1000: ,继续 其他的才能: ,(x, y, w, h),=, cv2.boundingRect (c) ,cv2.rectangle (cur_frame (x, y) (x + w, y + h) (0255 0), 2) , ,打印(“something is 移动! ! !“) led =, True ,if led ==,真的: ,for 小姐:拷贝范围(30): GPIO.HIGH, GPIO.output(18日) ,time . sleep (0.03) GPIO.LOW, GPIO.output(18日) ,time . sleep (0.03) ,打破 , ,cv2.imshow (& # 39; img # 39;,, cur_frame),=,pre_frame  gray_img , camera.release () cv2.destroyAllWindows ()
我的树莓派终端不能显示中文,因此会出现乱码
Ubuntu下的运行结果如下
树莓派下执行结果如下:
以上是“树莓派+摄像头如何实现对移动物体的检测”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!