一、安装OpenCv
检测运动物体需要用到opencv函数库,里面有丰富而且强大的图片处理函数供我们使用。
1、在树莓派安装运行在Python2上的OpenCV
sudo apt-get install libopencv-dev
sudo apt-get install python-opencv
如果出现下图的结果,说明Python2环境下的OpenCV安装成功。
2、在树莓派安装运行在Python3上的OpenCV
安装对应的依赖包(注意倒数第三条命令中要安装四个-dev软件包):
sudo apt-get install build-essential git cmake pkg-config -y
sudo apt-get install libjpeg8-dev -y
sudo apt-get install libtiff5-dev -y
sudo apt-get install libjasper-dev -y
sudo apt-get install libpng12-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt-get install libgtk2.0-dev -y
sudo apt-get install libatlas-base-dev gfortran -y
OpenCV模块pip安装
sudo pip3 install opencv-python
测试
在终端输入 :python3
然后 :import cv2
如果安装成功,则import不会有问题
下面就可以输出OpenCv的版本号
使用 :print(cv2.version)
退出python用: exit()
二、运动目标检测
运动目标检测的本质是轮廓检测。常用的运动目标检测算法有帧差法、光流法、背景减除法。
1、帧差法
帧差法是运动目标检测中常见的方法之一。其基本原理非常简单,先计算前后两帧相减的像素差,利用固定闭值进行二值化处理,得到前景运动目标。如果目标没有运动,那么两帧相减的像素差为零;若目标有明显的运动,那么两帧相减的像素差大于闭值,二值化处理可得到视频帧中的运动目标位置。
2、光流法
光流法的优点在于无需对场景的背景建模,就能够检测到运动目标,因此在动态场景中经常利用光流法来检测运动目标。然而,光流法基于亮度守恒假设条件,在复杂自然场景中,由于遮挡性、多光源、透明性和噪声等原因,使得光流的可靠性估计较差,获取到的运动信息误差较大。
3、背景减除法
背景减除法是一种有效的运动对象检测算法,基本思想是利用背景的参数模型来近似背景图像的像素值,将当前帧与背景图像进行差分比较实现对运动区域的检测,其中区别较大的像素区域被认为是运动区域,而区别较小的像素区域被认为是背景区域。背景减除法必须要有背景图像,并且背景图像必须是随着光照或外部环境的变化而实时更新的,因此背景减除法的关键是背景建模及其更新。
我这里只具体介绍帧差法,其他请自行学习。
基本步骤
相邻帧相减------阈值处理------去除噪声(腐蚀滤波)------膨胀连通------查找轮廓------外接矩形
首先读取视频或摄像头
# 视频文件输入初始化
filename = "/home/pi/Desktop/python代码/MP4/video.mp4"
#camera = cv2.VideoCapture(filename)
#如果是摄像头的话
camera = cv2.VideoCapture(0) #0表示默认摄像头
如果要保存视频:
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'