内容待完善,请暂时参考如下链接:
参考1. 图像平滑、滤波 @ CSDN
参考2. OpenCV 中的图像处理(二) 之 16
应用1:视频运动模糊:沿时间轴的图像平滑
设f表示一帧图像、当前视频帧序号为n,采用N张图像沿时间轴的像素平滑之后的结果来表示当前待显示的图像帧,公式为:
解释:
1. 假设w的值均为1/N,则上式为均值滤波,即前后N张图像相加后求平均
2. 如果w的N个系数保持不变,则上述公式可以表示为卷积和、即LTI系统的输出
代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
vid_file = './video/football_ntsc.mp4'
# 1. open a video and the camera
vid_reader = cv2.VideoCapture(vid_file)
N = 5
frame_cnt = 0
frames = []
w = [0.3, 0.1, 0.2, 0.1, 0.3]
while(vid_reader.isOpened()):
ret, frame = vid_reader.read() # 读视频一帧
if not(ret):
break
frame_cnt += 1
frames.append(frame)
frame_N = np.zeros(frame.shape, np.float32)
if frame_cnt >= N:
for i in np.arange(N):
frame_N += w[i]*frames[i].astype(np.float32)
frame_N = frame_N.astype(np.uint8)
frames = frames[1:]
else:
continue
cv2.imshow('Motion Blur', frame_N.astype(np.uint8))
# wait until key strokes to break
if cv2.waitKey(30) & 0xFF == ord('q'):
break
vid_reader.release()