Компоновка кадров с использованием среднего в opencv - PullRequest
1 голос
/ 08 июня 2019

Я пытаюсь создать составное изображение, используя среднее из двух изображений, зацикливая набор кадров из видео и получая среднее значение составного + следующий кадр.

Однако это выглядит ужасно,Что я делаю неправильно?Я думаю, что я неправильно понимаю способ добавления / разделения массивов в 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 Ответ

2 голосов
/ 08 июня 2019

Проблема заключалась в том, что я использовал массив типа np.uint8, который переполнялся при выполнении сложения. Все, что мне нужно было сделать, это изменить это значение на np.uint32, чтобы оно могло удерживать это число перед повторным делением.

Мне также нужно было убедиться, что в первом кадре я не добавил 0 + кадр, в первом кадре должен быть составной = кадр.

    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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...