Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从打开的临时文件加载VideoCapture对象_Python_Opencv_Image Processing_Video Processing - Fatal编程技术网

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

Python 如何从打开的临时文件加载VideoCapture对象,python,opencv,image-processing,video-processing,Python,Opencv,Image Processing,Video Processing,我想获取一个已经打开的临时文件,将其加载到视频捕获对象中,并生成第一帧的屏幕捕获 从我在文档中可以看出,您只能通过以下两种方式之一创建VideoCapture对象: #Load from filename cap = cv2.VideoCapture('filename.avi') #Load for webcam cap = cv2.VideoCapture(0) 当我尝试直接或使用临时名称加载临时文件时,会收到以下错误消息: #Hopeful but not valid: cap = c

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

从我在文档中可以看出,您只能通过以下两种方式之一创建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对象?

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

假设您有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)
OpenCV cv2.VideoCapture API要求视频格式为.mp4、.avi。因此,正常的工作流程意味着根据扩展名对视频文件进行解压缩,然后对帧进行解码。您不能将缺少扩展名和所需压缩的临时文件路径直接传递给OpenCV