使用 python 和 opencv 获取电影属性
Getting movie properties with python and opencv
我正在使用 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
是文档列表中的第 4 项,实际上当我使用正确的整数计数器时 3
我得到了这个属性。我想知道是否有更简洁的方法来做到这一点,即利用 class 本身并使用所有键、整数组合为其编写字典。
你可以这样做:
cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
可以从 cv2.cv
模块访问 CV_CAP_PROP_*
常量:
cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)
不幸的是,并非所有有用的东西都从 cv2
从 cv
移植过来,所以如果您找不到自己的东西,通常最好查看 cv2.cv
在 cv2
中寻找。
例如,一些常量,如 cv2.CV_LOAD_IMAGE_*
已被移动。
更新:-
对于 OpenCV 3.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)
returns AttributeError: 'module' object has no attribute 'cv'
与 OpenCV 3.1。以下对代码的小调整对我有用:
cap.get(cv2.CAP_PROP_FRAME_WIDTH)
请注意,CV_ 不再需要作为属性名称的前缀。
我正在使用 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
是文档列表中的第 4 项,实际上当我使用正确的整数计数器时 3
我得到了这个属性。我想知道是否有更简洁的方法来做到这一点,即利用 class 本身并使用所有键、整数组合为其编写字典。
你可以这样做:
cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
可以从 cv2.cv
模块访问 CV_CAP_PROP_*
常量:
cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)
不幸的是,并非所有有用的东西都从 cv2
从 cv
移植过来,所以如果您找不到自己的东西,通常最好查看 cv2.cv
在 cv2
中寻找。
例如,一些常量,如 cv2.CV_LOAD_IMAGE_*
已被移动。
更新:- 对于 OpenCV 3.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)
returns AttributeError: 'module' object has no attribute 'cv'
与 OpenCV 3.1。以下对代码的小调整对我有用:
cap.get(cv2.CAP_PROP_FRAME_WIDTH)
请注意,CV_ 不再需要作为属性名称的前缀。