OpenCV VideoCapture可以接受类似Python文件的对象吗?

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

这很好用:

import cv2
cv2.VideoCapture('somevideo.mp4').isOpened()

> True

这引发异常:

import cv2
f = open('somevideo.mp4', 'rb')
cv2.VideoCapture(f)

> TypeError: an integer is required (got type _io.BufferedReader)

我希望后一个示例能够正常工作,因为我有一个类似Python的文件对象,该对象抽象了文件的位置(不是标准的OS文件系统)。

OpenCV是否可以被诱使接受标准的类似python文件的对象?从这个异常来看,它似乎将仅支持文件描述符或文件名字符串。

python opencv
1个回答
0
投票

OpenCV是一个C ++库,具有自动生成的Python绑定。总的来说,部分原因在于,Python库实际上根本不是可扩展的或灵活的。您发送到函数中的参数将被发送到C ++,并且您在任何意外的事情上都会得到一个错误。从the latest docs开始,VideoCapture对象的可用构造函数为:

VideoCapture ()
Default constructor. More...

VideoCapture (const String &filename, int apiPreference=CAP_ANY)
Opens a video file or a capturing device or an IP video stream for video capturing with API Preference. More...

VideoCapture (int index, int apiPreference=CAP_ANY)
Opens a camera for video capturing. More...

因此,您可以看到唯一有效的签名包含设备号的整数索引或应该是文件名的字符串。 open()方法对签名的期望相同。

© www.soinside.com 2019 - 2024. All rights reserved.