在opencv中使用均值合成框架

时间:2019-06-08 11:26:00

标签: python numpy opencv

我试图通过循环播放视频中的一组帧并获取合成+下一个帧的均值来使用两个图像的均值来创建合成图像。

但是看起来很糟糕。我究竟做错了什么?我想我一定误会了在numpy或opencv中添加/划分数组的方式。由于它发出的亮度只有应有的亮度的一半,所以好像从未添加过。加上树木的粗糙边缘。

enter image description here

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

1 个答案:

答案 0 :(得分:2)

问题是我使用的类型为np.uint8的数组在加法时会溢出。我需要做的就是将其更改为np.uint32,以便它可以容纳该数字,然后再进行除。

我还需要确保在第一帧中我没有添加0 +帧,第一帧应为Composite = frame。

    if i == 0:
        composite = resized_frame
    else:
        composite = composite.astype(np.uint32)
        composite = (resized_frame + composite) / 2
        composite = composite.astype(np.uint8)

enter image description here