Я пытаюсь поместить изображение не широкоэкранного видеокадра в черный кадр 16: 9, например: если мой проект настроен на 720p (1280 * 720) и размер моего видеокадра составляет 640 * 480Сначала я вычисляю коэффициент масштабирования, изменяю его высоту до 720 (и ширину соответственно), затем помещаю его на черное изображение 1280 * 720.
Пробовал этот метод , но это не таку меня почему-то не получается.
import cv2
import numpy as np
project_width, project_height = 1280, 720
video_file = "any_path/whatever.mp4"
black_image = np.zeros((project_height,project_width,3), np.uint8)
vidcap = cv2.VideoCapture(video_file)
while(vidcap.isOpened()):
ret, frame = vidcap.read()
if ret==True:
frame_height, frame_width, channels = frame.shape
if frame_height < project_height or frame_width < project_width:
zoom_ratio = project_height/frame_height
desired_width = int(frame_width * zoom_ratio)
desired_height = project_height
frame = cv2.resize(frame, (desired_width, desired_height))
border_width = int((project_width-desired_width) / 2)
black_image[0:, border_width:] = frame
В этот момент я получил ошибку: TypeError: индексы среза должны быть целыми числами или None или иметь index метод
РЕДАКТИРОВАТЬ: плохо, я забыл преобразовать border_width в int, но теперь я столкнулся с другой проблемой:
ValueError: не удалось передать входной массив из фигуры (720,1152,3)в форму (720,1216,3)
(в данном случае мое исходное видео - 1152 * 720)
EDIT2 - я неожиданно понял решение: в последней строке я должен указатьконечный пиксель изображения, чтобы он работал.В случае, если у кого-то тоже есть такая проблема:
black_image[0:, border_width:project_width - border_width] = frame