使用Python OpenCV2向非宽屏视频帧添加黑色信箱

时间:2019-01-28 19:04:37

标签: python video-processing cv2

例如,我尝试将非宽屏视频帧图像放入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

0 个答案:

没有答案