使用python获取电影属性并打开

2024-04-25 11:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用OpenCV对我在实验中制作的电影进行一些计算。要做到这一点,我需要一些电影的属性,如果我能从电影本身自动检测到它们,那将是很方便的。在documentation中,我发现以下代码:

cv2.VideoCapture.get(propId) → retval

在下面的列表中,它声明对于总帧数propId应该是CV_CAP_PROP_FRAME_WIDTH。但是,当我尝试以下操作时,会出现错误:

>> cap = cv2.VideoCapture('runoff.MOV')
>> print cap.get('CV_CAP_PROP_FRAME_WIDTH')
TypeError: an integer is required

如果在代码中输入整数:

>> cap = cv2.VideoCapture('runoff.MOV')
>> print cap.get(3)
1920.0

CV_CAP_PROP_FRAME_WIDTH是文档列表中的第四项,当我使用正确的整数计数器3时,我得到这个属性。我想知道是否有一种更简洁的方法来做到这一点,利用类本身并为它编写一个包含所有键和整数组合的字典。


Tags: 代码列表get属性电影整数widthcv2
3条回答

可以从cv2.cv模块访问CV_CAP_PROP_*常量:

cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)

不幸的是,并不是所有有用的东西都是从cv2cv移植过来的,所以如果你在cv2中找不到你要找的东西,那么在cv2.cv中查找通常是一个好主意。 例如,某些常量(如cv2.CV_LOAD_IMAGE_*)已被移动。

更新:- 对于OpenCV3.1使用:

cap.get(cv2.CAP_PROP_FRAME_COUNT)

基本上,属性名已被修改,不再需要开头的“CV”。 (答案部分中对Blane的评价)

我正在使用OpenCV 3.1,Hannes建议的上述方法对我不起作用。OpenCV 3.1的方法调用和属性的名称格式似乎已经稍微更新了一些。例如,cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)使用OpenCV 3.1返回AttributeError: 'module' object has no attribute 'cv'。以下对代码的小调整对我有效: cap.get(cv2.CAP_PROP_FRAME_WIDTH)

请注意,不再需要CV_u作为属性名称的前缀。

你可以这样做:

cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)

相关问题 更多 >

    热门问题