python - 在 opencv 中使用均值合成帧

标签 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

最佳答案

问题是我使用的是 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)

enter image description here

关于python - 在 opencv 中使用均值合成帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505913/

相关文章:

python - 如何在 django 中创建单个帖子和 url 详细信息的 View ?

python - 非矩形域上的 3D 图

python - 为什么 tensorflow 中的随机数生成器 tf.random_uniform 比 numpy 等效项快得多

python - Python OpenCV无法识别我的第二个WebCam

opencv - 在 OpenCV/Emgu.CV 中过滤掉被检测为 "moving"前景的噪声

python - 比较两个文件并将缺失值写入文件

python - 使用单个 main 执行多个 python 文件

python - 如何在 Python 多处理中使用类?

c++ - 我应该使用什么类型的 Visual Studio 项目?

python - 如何将 pandas value_counts 转换为 python 列表