我正在尝试通过循环视频中的一组帧并获取复合图像 + 下一帧的平均值,使用两幅图像的平均值创建合成图像。
然而,它看起来很糟糕。我究竟做错了什么?我想我一定是误解了在 numpy 或 opencv 中添加/划分数组的方式。由于它的亮度只有应有的一半,就好像添加从未发生过一样。加上树木粗糙的边缘。
import cv2
import numpy as np
frames = [cv2.imread('./frames2/thumb0001.jpg'),
cv2.imread('./frames2/thumb0002.jpg')]
composite = np.zeros((500, 500), dtype=np.uint8)
composite
for i, frame in enumerate(frames):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
resized_frame = cv2.resize(gray, (500, 500))
composite = (resized_frame + composite) / 2
composite = composite.astype(np.uint8)
while True:
cv2.imshow('frame', composite)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
最佳答案
问题是我使用的是 np.uint8
类型的数组,它在进行加法运算时会溢出。我所需要做的就是将其更改为 np.uint32
,以便它可以在再次除法之前保存该数字。
我还需要确保在第一帧上我没有添加 0 + frame,第一帧应该使 composite = frame。
if i == 0:
composite = resized_frame
else:
composite = composite.astype(np.uint32)
composite = (resized_frame + composite) / 2
composite = composite.astype(np.uint8)
关于python - 在 opencv 中使用均值合成帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505913/