树莓派摄像头实时监控,树莓派实现目标检测

  树莓派摄像头实时监控,树莓派实现目标检测

  内容一:在草莓派上安装OpenCv1,在Python2上安装OpenCV2,在草莓派上安装在Python3上运行OpenCV2,检测移动对象源代码。

  一、安装OpenCv

  物体检测需要opencv函数库,opencv函数库具有丰富而强大的图像处理功能。

  1.在草莓派上安装运行在Python2上的opencvsudoapt-getinstallbopencv-devsudoapt-getinstallpthon-opencv。当出现下图的结果时,意味着Python2环境下的opencv安装成功。

  2.在草莓派上安装Python3上运行的OpenCV安装对应的依赖包。(注意倒数第二个命令将安装四个开发包。)。

  sudo apt-getinstallbuild-essentialgitcmakepkg-config-ysudoapt-getinstalllibjpeg 8-dev-ysudoapt-getinstalllibtiff 12-dev-ysudoapt-getinstallavcodec-de vlibavformat-devlibswscale-dev libs allibgtk 2.0-dev-ysudoapt-getinstallinstallivcod

  Sudo pip 3操作系统安装-python测试

  在终端上输入:python3。

  然后,导入cv2

  如果安装成功,导入没有问题

  可以输出OpenCv的版本号。

  使用:打印(cv2.version))

  使用python: exit())

  2.运动目标检测运动目标检测的本质是轮廓检测。常用的运动目标检测算法有帧差法、光流法和背景差分法。

  1.帧差法

  帧差法是运动目标检测中常用的方法之一。基本原理很简单。首先计算相减前后两帧的像素差,用固定闭合值二值化得到前景运动目标。如果目标不动,两帧相减的像素差为零。如果目标有明显的运动,并且两帧相减后的像素差大于闭合值,则可以通过二值化得到运动目标在视频帧中的位置。

  2.光流法

  光流法的优点是不需要对场景背景建模就可以检测出运动物体,所以光流法常用于检测动态场景中的运动物体。然而,光流法是基于亮度守恒的假设。在复杂的自然场景中,由于遮挡、多光源、透明、噪声等原因,光流的可靠性较低,获得的运动信息误差较大。

  3.背景扣除法

  背景去除法是一种有效的运动目标检测算法。基本思想是利用背景的参数模型逼近背景图像的像素值,通过比较当前帧与背景图像的差异来检测运动区域。这里,差异大的像素区域被用作移动区域,差异小的像素区域被用作背景区域。背景去除方法需要背景图像,并且背景图像需要随着光照和外界环境的变化而实时更新,因此背景去除方法的关键是背景建模及其更新。

  这里只具体介绍帧差法。其他请自行学习。

  基本步骤

  相邻帧相减-阈值处理-去噪-蚀刻滤波-扩展连通性-轮廓搜索-外接矩形。

  首先导入视频或摄像机。

  #视频文件输入初始化filename=/home/pi/desktop/python code/MP4/video . MP4 # camera=cv2 . video capture(filename)卡

  fourcc=cv2 . video writer _ fourcc( x , v , I , d )# cv2 . video writer _ fourcc out 1=cv2 . video writer()/home/pi/desktop/python code/MP4/video返回的视频格式的唯一代码第三个是这个视频的fps。第四,一个元组就是这个视频的宽度和高度。

  更改帧大小:

  # Transform frame=cv2 . resize(frame,(800,400),interpolation=cv2。INTER_CUBIC)转换成灰度图像,并检测轮廓。

  #结果转换成灰度gray_pic=cv2.cvtcolor(frame,cv2。COLOR_BGR2GRAY)),受伤的小懒虫被过滤模糊。

  /p gray _ pic=cv2。Gaussian blur (gray _ pic,(21,21),0)将两幅图像之间的差值的绝对值输出到另一幅图像:

  Delta=CV2。ABS Diff (last frame,gray _ pic)图像二值化,寻找轮廓的图像只能传入二值图像,不能传入灰度图像:

  thresh=cv2 . threshold(frame delta,25,255,cv2.thresh _ binary) [1]获取轮廓位置:

  Cnts,hierarchy=cv2 . find contexts(thresh . copy(),cv2.retr _ external,cv2.chain _ approximate _ simple)参数:

  1要查找其轮廓的图像只能作为二进制图像传入,而不能作为灰度图像传入。

  2大纲有四种检索模式:

  2.cv2。RETR _外部表示只检测外部轮廓。

  2.cv2检测到的轮廓。RETR列表不建立等级关系。

  2.cv2。RETR_CCOMP建立两级等高线,上层是外边界,内层是内孔的边界信息。如果内孔中有另一个连接的对象,则该对象的边界也在顶层。

  2.cv2。RETR树建立了分层树形结构的轮廓

  3等高线的近似方法

  2.CVChain _ Proxy _ None存储所有轮廓点,相邻两点的像素位置差小于1,即max(abs(x1-x2),abs(y2-y1))==1。

  2.Chain _ Proxy _ Simple压缩水平、垂直和对角线方向的元素,只保留该方向的端点坐标。例如,一个矩形轮廓只需要4个点来保存轮廓信息。

  按键结束:

  #如果按下Q键,跳出循环ifcv 2 . wait key(30)0x ff==ord( Q ):break wait key()函数的作用是连续刷新图像,延迟的频率和时间,单位为ms。

  返回值是当前的键盘键值。

  wait key()在给定的时间内(以毫秒为单位)等待用户的键被触发;如果用户不按键,继续等待(循环)。

  Common:设置waitKey(0)意味着程序将无限期地等待用户的按键事件。

  一般来说,在执行imgshow时,如果设置了waitKey(0),则意味着当按下任意键继续显示视频时,需要将延迟时间设置为大于0的参数。

  Delay 0,delay“delay”ms,这个功能在显示视频时很有用,

  用于设置程序在显示一帧图像后等待“延时”毫秒显示下一帧视频;

  如果使用waitKey(0),则只显示第一帧视频源代码#导入必要的软件包导入cv2#视频文件输入初始化filename=/home/pi/desktop/python code/MP4/Video . MP4 # camera=CV2 . Video capture(filename)#如果是摄像机,camera=cv2。VideoCapture(0) #0表示默认摄像头#视频文件输出参数设置out_fps=30.0 #输出文件帧率fourcc=cv2 . video writer _ fourcc( x , v , I ,D )# cv2 . video writer _ fourcc out 1=cv2 . video writer(/home/pi/desktop/python code/MP4/video 2 . MP4 ,fourcc,out_fps,(800,40)) #最后,视频宽度和高度out2=cv2。 00)) #初始化当前帧的上一帧lastFrame=None#遍历视频的每一帧同时camera.isOpened(): #读取下一帧(ret,frame)=camera.read() #如果抓不到一帧,说明我们已经到了视频的末尾如果没有ret: break #调整帧的大小frame=cv2.resize (frame,(800,400),inter _ cubic) #结果是一个灰度图像gray_pic=cv2.cvtColor(frame color _ bgr2gray) gray _ pic=cv2。Gaussian blur (gray _ pic,(21,21),0) #如果第一帧为none,如果最后一帧为None则初始化:last frame=gray _ piccontinue #计算当前帧与前一帧的差值,将两幅图像差值的绝对值输出到另一幅图像到frame delta=cv2 . ABS diff(last frame,Gray_pic) #当前帧设置为下一帧的前一帧。lastFrame=gray_pic #图像二值化thresh=cv2 . threshold(frame delta,25,255,cv2.thresh _ binary) [1] #去除图像噪声,先腐蚀后膨胀(形态学开运算)thresh=cv2.erode (thresh,none,iterations=1)thresh=cv2 . expand(thresh,none,iterations=2) #阈值图像上的轮廓位置,在cv3中,这个函数只有三个# cv2.chain _ approximate _ simple返回值,压缩垂直、水平和对角线方向,只留下CVChain _ Proxy _ Simple) #遍历cnts中c的轮廓:#忽略小轮廓,消除错误如果CV2。轮廓区域(C) 300: continue #计算轮廓的包围盒并在当前帧中画出包围盒(x,y,w,H)=cv2 . bounding rect(C)cv2 . rectangle(Frame,(x,y),(x w,y h),(0,255,0),2) #显示当前帧cv2.imshow (frame ,Frame)cv2 . im Show( Frame delta)Frame)cv2 . im Show( thresh ,thresh) #保存视频out1.write (frame) out2.write

  利用摄像头实现人体活动检测(python openCV)

  运动目标检测(2)-帧差法

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • win10有录像功能吗,win10录屏打开摄像头
  • c#虚拟摄像头,C#摄像头
  • c#虚拟摄像头,C#摄像头,C# 利用AForge实现摄像头信息采集
  • ,,JavaScript 如何在浏览器中使用摄像头
  • iPhone12promax摄像头介绍,iPhone14摄像头
  • 双摄像头测距离原理,测距摄像头的测距原理怎么设置,单目摄像头测距原理
  • 雨课堂期末考试有摄像头吗,雨课堂考试怎么开摄像头吗
  • 相机标定外参怎么得出,摄像头内外参标定的参数,相机的内外参数标定
  • 腾讯会议能否看到学生屏幕,腾讯课堂学生开摄像头其他同学能看见吗
  • 笔记本win10怎么打开摄像头拍照,win10摄像头怎么拍照
  • 树莓派控制摄像头拍照,树莓派连接摄像头教程
  • 摄像头移动检测算法软件,摄像头移动检测算法有哪些
  • 笔记本摄像头倒置怎么解决,笔记本摄像头倒着是怎么回事
  • 单目摄像头像测距,双目摄像机测量距离准确吗,双目摄像头测距范围
  • opencv连接网络摄像头,opencv调用摄像头采集图像
  • 留言与评论(共有 条评论)
       
    验证码: