例如,我尝试将非宽屏视频帧图像放入16:9黑色帧中:如果我的项目设置为720p(1280 * 720),并且视频帧的大小为640 * 480 ,首先计算缩放比例,将其高度调整为720(并相应调整宽度),然后将其放置在1280 * 720黑色黑色图像上。
尝试了this method,但是由于某种原因它对我不起作用。
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:切片索引必须是整数或无,或具有 index 方法
编辑:我很糟糕,我忘了将border_width转换为int,但是现在我遇到了另一个问题:
ValueError:无法将输入数组从形状(720,1152,3)广播到形状(720,1216,3)
(在这种情况下,我的源视频为1152 * 720)
EDIT2-我突然意识到了解决方案:在最后一行,我必须指定图像的末端像素,这样它才能起作用。如果有人也有此问题,
black_image[0:, border_width:project_width - border_width] = frame