Python OpenCV 像素加法

问题描述 投票:0回答:0

我正在尝试编写一个程序,该程序采用 1920x1080 30fps 视频和具有 1080x3(对于 RGB 中的每个通道)的(随机)掩码,并返回一个视频,其中每个像素都由该掩码操作。

获取 input.mp4 并创建屏蔽版本的代码如下所示:

# init video_reader and video_writer:
video_caputure = cv2.VideoCapture("./videos/input.mp4")


frame_width = int(video_caputure.get(3))
frame_height = int(video_caputure.get(4))
frame_count = int(video_caputure.get(cv2.CAP_PROP_FRAME_COUNT))
 

video_writer = cv2.VideoWriter("./videos/output.mp4",
                                cv2.VideoWriter_fourcc(*"mp4v"), 30,
                                (frame_width, frame_height))

# convert input to output using mask:
with open("./masks/mask.pickle", "rb") as file:
    mask = pickle.load(file)
    bar = ShadyBar("Processing", max= frame_count)
    while(video_caputure.isOpened()):
        ret, frame = video_caputure.read()

        if ret:
            converted_frame = np.add(frame, mask, dtype=np.int16)
            converted_frame = converted_frame % 256
            converted_frame = converted_frame.astype(np.uint8)

            video_writer.write(converted_frame)
            bar.next()
        else:
            break


video_caputure.release()
video_writer.release()

应该移除这个面具的版本看起来像这样:

# convert output into restored with mask:
video_caputure = cv2.VideoCapture("./videos/output.mp4")


frame_width = int(video_caputure.get(3))
frame_height = int(video_caputure.get(4))
frame_count = int(video_caputure.get(cv2.CAP_PROP_FRAME_COUNT))
 
video_writer = cv2.VideoWriter("./videos/restored.mp4",
                                cv2.VideoWriter_fourcc(*"mp4v"), 30,
                                (frame_width, frame_height))

# convert input to output using mask:
with open("./masks/mask.pickle", "rb") as file:
    mask = pickle.load(file)
    bar = ShadyBar("Processing", max= frame_count)
    while(video_caputure.isOpened()):
        ret, frame = video_caputure.read()

        if ret:
            converted_frame = np.subtract(frame, mask, dtype=np.int16)
            converted_frame[converted_frame < 0] += 255
            converted_frame = converted_frame.astype(np.uint8)

            video_writer.write(converted_frame)
            bar.next()
        else:
            break


video_caputure.release()
video_writer.release()

在这里你可以看到原始图像、蒙版和重建图像:

原创:

original

蒙面:

masked

重建:

enter image description here

如果我测试我的转换逻辑并一个接一个地直接应用它们,我会得到原始图像,所以我假设错误是由某些压缩引起的。

python numpy opencv video cv2
© www.soinside.com 2019 - 2024. All rights reserved.