思路
- 设置视频来源
- 设置各种参数,包括储存,窗口,过程参数等
- 捕获第一帧图像
- 进入循环
- 将第一帧图像赋给过程frame
- 对图像进行灰度处理
- 对图像执行高斯模糊,使其尽可能减小灰度的变化梯度
- 将两幅灰度图像相减,从而将背景删除
- 给出阈值,将相减后的图像转化为黑白图
- 将多余的零星变化白点置为黑色
- 检测白色色块的大小和边缘
- 按照阈值检测白色色块的边缘
- 绘出动态变化物体的边缘矩形
- 显示
- 储存到本地
- 按下esc退出循环
- 清零
注意点
- 在储存时彩色图像和灰度黑白图像的制式不同,需要分别指出各自的制式,否则无法保存到本地。高斯模糊的阈值、相减时的阈值、色块大小的阈值、灰度变化的阈值需要不断调节,最终结果受到光影、运动、物体明暗程度、场景环境的诸多影像,和视频源也有极大的关系
- 循环较长,各种逻辑关系必须非常清楚
- 网上例程很多,但基本上不可能拿来即用,本例程基本上算是最新的
- 后附各种图像和动画,以供参考
- 本例程采用手机的摄像头作为无线IP视频源,可能会有些卡滞,640x480的质量差强人意,转化为2M大小的GIF更是打了折扣,但程序毫无疑问是畅通的。
- 将手机作为无线视频源也是一个技术点,在后续的学习笔记中再行记录吧。
import cv2
import numpy as np
#设置窗口大小
cv2.namedWindow("Video",0)
cv2.resizeWindow("Video", 640, 480)
cv2.namedWindow("Video_gray",0)
cv2.resizeWindow("Video_gray"