Python + OpenCV + Base64:将帧转换为 Base64 时出现问题

我正在尝试将视频转换为帧,并将这些帧转换为 Base64 字符串。我无法这样做并得到一些例外。下面是我的代码:


import cv2

import base64



def footage_to_frame(video):

    vidcap = cv2.VideoCapture(video)

    success, frames = vidcap.read()

    if success:

        return frames



def frame_to_base64(frames):

    with frames as frame:

        frame_b64 = base64.b64encode(frame.read())

    return frame_b64

该方法的函数调用是:


frames = converter.footage_to_frame("/Users/myname/Desktop/video.mp4")

converter.frame_to_base64(frames)

以下是我在控制台中收到的错误:


File "/Users/myname/Desktop/Test/src/service/converter.py", line 13, in frame_to_base64

    with frames as frame:

AttributeError: __enter__


慕妹3146593
浏览 162回答 1
1回答

ITMISS

在函数frame_to_base64(frames)中,frames已经是单个图像,因为VideoCapture.read返回单个图像。它也是一个 opencv 图像(numpy 数组),它不是你可以使用“with”的东西。def frame_to_base64(frame):    return base64.b64encode(frame)如果你想读取视频的所有帧,你应该这样做:import cv2import base64def footage_to_frame(video):    vidcap = cv2.VideoCapture(video)    frames = []    #  read until no more frames exist in the video    while True:        success, frame = vidcap.read()        if (success):            frames.append(frame)        else:            #  unable to read a frame            break     return framesdef frames_to_base64(frames):    frames_b64 = []    #  iterate frames and convert each of them to base64    for frame in frames:        frames_b64.append(base64.b64encode(frame))    return frames_b64尽管根据视频长度,您可能会遇到内存问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python