如何从打开的临时文件加载VideoCapture对象

时间:2017-11-15 03:38:48

标签: python opencv image-processing video-processing

我想获取一个已经打开的临时文件,将其加载到VideoCapture对象中,并生成第一帧的屏幕截图。

从文档中我可以看出,您只能通过以下两种方式之一创建VideoCapture对象:

#Load from filename
cap = cv2.VideoCapture('filename.avi')

#Load for webcam
cap = cv2.VideoCapture(0)

当我尝试直接或使用临时名称加载我的临时文件时,我收到以下错误消息:

#Hopeful but not valid:
cap = cv2.VideoCapture(file)
> AttributeError: 'file' object has no attribute '__trunc__'

#Also no dice
cap = cv2.VideoCapture(file.name)
> OpenCV: Couldn't read video stream from file "/var/folders/53/xxdyqg893pbg73pfd7_q_pg00000gp/T/tmpD0Cd6D"

如何使用文件对象,字符串缓冲区或类似的东西加载VideoCapture对象?

1 个答案:

答案 0 :(得分:0)

我能够通过将文件存储在本地临时文件中来实现这一点。

假设您有内容,即django.core.files.uploadedfile.InMemoryUploadedFile - 或类似内容 - 您可以执行以下操作:

    import tempfile
    import cv2

    temp_filename = os.path.join(tempfile.gettempdir(), content.name)
    local_temp_file = open(temp_filename, "w+")
    content.seek(0)
    local_temp_file.write(content.read())
    local_temp_file.close()

    cap = cv2.VideoCapture(local_temp_file.name)