这是一个期末作业,就是写一个程序用于追踪视频中运动的目标物体。完成这个视频首先要下两个库,一个是numpy库,另外一个是opencv 库。
numpy库的下载安装教程:https://jingyan.baidu.com/article/03b2f78c0473e55ea237aeca.html
opencv 库的安装过程:在原来已经有pip 工具的基础上,cmd命令行进入到你python软件所在目录下的Scripts文件夹里,输入pip install opencv-python(在计算机联网的条件下,系统就可以通过网络收集资源下载),出现Successfully installed opencv-python 即成功。
下面加一下源代码:
import cv2
import numpy as np
videocap=cv2.VideoCapture('f://PYTHON//test1.mp4')
firstframe=None
while True:
ret,frame=videocap.read()
if not ret:
break
pp=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #将RGB转换为GSV
if firstframe is None: #前面已经设置为空
firstframe=pp
continue
frameDelta=cv2.absdiff(firstframe,pp) #帧差法,将firstframe和gray的差值输出到frameDelta中
thresh=cv2.threshold(frameDelta,25,255,cv2.THRESH_BINARY)[1] #图像二值化(使得图像明显黑白化)
thresh=cv2.dilate(thresh1,None,iterations=2)
x,y,w,h=cv2.boundingRect(thresh) #确定目标大小
frame=cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2) #在frame上画出矩形
cv2.imshow("frame",frame) #原视频文件
cv2.imshow("Thresh",thresh)
cv2.imshow("frameDelta",frameDelta)
key=cv2.waitKey(1)&0xFF
if key==ord("q"):
break
videocap.release()
cv2.destroyAllWindows()
(要注意代码格式以及缩进问题)首先打开一个视频文件,将视频由RGB格式转换为GSV格式,利用帧差法(absdiff),传入两个视频参数,由于背景是相对不变的,由此系统可以明确运动的物体是哪一个。将运动物体识别出来后,我们可以用一个boundingRect方法将目标物体大小确定,在用rectangle方法将目标物体框选出来。其余方法可以自己百度通过来进行更深一步的学习。
视频就不上传了。在做这个作业的时候,我发现拍摄视频的时候由于灯光没有打好,到最后视频中不仅有运动的实物还有明显运动变化的影子,导致最后用于框选目标物体的框范围变化十分之大,有时候会框框会框选住整一个视频界面。由于是赶着写期末作业,我的学习并没有很深入,还不会利用图像特征点检测来确定真实的目标物体,只是用了帧差法来大概确定目标物体。
学习很粗浅,只是作为初步学习的参考,还请各位体谅。