【发布时间】:2020-03-11 15:33:20
【问题描述】:
我想找到视频流的静态像素。通过这种方式,我可以检测到视频流中的徽标和其他非移动项目。我的脚本背后的想法如下:
- 在名为
previous的列表中收集多个大小相同且灰度大小相同的帧 - 如果采集到一定数量的帧,调用函数
np.std - 此函数循环遍历新图像的所有
x-和y-coordinates。 - 根据所有帧对应坐标的灰度值计算所有坐标的灰度值标准差
我的脚本:
import math
import cv2
import numpy as np
video = cv2.VideoCapture(0)
previous = []
n_of_frames = 200
while True:
ret, frame = video.read()
if ret:
cropped_img = frame[0:150, 0:500]
gray = cv2.cvtColor(cropped_img, cv2.COLOR_BGR2GRAY)
if len(previous) == n_of_frames:
stdev_gray = np.std(previous, axis=2)
previous = previous[1:]
previous.append(gray)
else:
previous.append(gray)
cv2.imshow('frame', frame)
key = cv2.waitKey(1)
if key == ord('q'):
break
video.release()
cv2.destroyAllWindows()
这个过程非常缓慢,我很好奇是否有更快的方法来做到这一点。我对 Cython 等持开放态度。非常感谢!
【问题讨论】:
-
如果我假设您以 25 fps 的速度拍摄,那么平均超过 200 帧意味着您正在寻找 8 秒内的变化。如果是这样,您肯定不需要以每秒 25 倍的速度对每帧进行计算吗?您可以每 10 帧或 25 帧抓取并分析一次吗?其次,在您尝试通过优化来加快速度之前,请衡量您所看到的内容 - 因此请尝试了解仅捕获需要多长时间,然后仅进行分析...然后进行优化.
-
最快意味着什么时间窗口?
标签: python image numpy opencv computer-vision