我想要找到视频流中静态像素。这样我就可以检测我的视频流上的logo和其他不动的物品。我脚本的想法如下:
- 在一个名为
previous
的列表中收集一些等大小和灰度大小的帧。 - 如果收集了一定数量的帧,则调用函数
np.std
- 该函数循环遍历新图像的所有
x-
和y-坐标
。 - 基于所有帧对应坐标的灰度值,计算所有坐标的灰度值的标准差。
我的脚本:
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等工具。非常感谢您提前的帮助!