实现对视频的动态捕捉
video=cv2.VideoCapture(0) 实现对摄像头的控制;
video.read() 得到摄像头打开后的第一帧图像,存入frame;
gray得到灰度图;
gaussianBlur进行高斯模糊;
若是第一张图,则保存为first_frame;
后续图与第一张图比较,cv2.absdiff(first_frame,gray);
黑白+扩大;
黑白:absdiff得到的30以内的像素点为黑色,其余为白色;
并进行dilate扩大,参数如下;
thresh_frame=cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]
thresh_frame=cv2.dilate(thresh_frame,None,iterations=2)
传入方法得到轮廓,并用rectangle标记;
代码如下
import cv2,time #加入time 延时camera
first_frame=None #numpy用于存放数据
video=cv2.VideoCapture(0) #number 表示camera
while True:
check, frame = video.read() #最开始的一帧
#time.sleep(3)
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #把frame变为灰度图
gray=cv2.GaussianBlur(gray,(21,21),0) #高斯模糊
if first_frame is None: #初始化为gray
first_frame=gray
continue #跳过后续 #
#计算第一个图和第二个图的差别
delta_frame = cv2.absdiff(first_frame,gray) #比较两者差异
#差别大于30 变为白色
#差别小于30 变为黑色
thresh_frame=cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1] #30以内的 变为黑色 [0] 用不到 [1]用得