OpenCV的Python模块`cv2`中缺少CAP_PROP_FRAME_COUNT常量。

14

如何在Python中从OpenCV访问CAP_PROP_FRAME_COUNT?

我尝试了这个:

import cv2
cap = cv2.VideoCapture('myvideo.avi')
frames_count, fps, width, height = cap.get(cv2.CAP_PROP_FRAME_COUNT), cap.get(cv2.CAP_PROP_FPS), cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

还有这个:

import cv2
import cv
cap = cv2.VideoCapture('myvideo.avi')
frames_count, fps, width, height = cap.get(cv.CAP_PROP_FRAME_COUNT), cap.get(cv.CAP_PROP_FPS), cap.get(cv.CAP_PROP_FRAME_WIDTH), cap.get(cv.CAP_PROP_FRAME_HEIGHT)

还有这个:

import cv2
cap = cv2.VideoCapture('myvideo.avi')
frames_count, fps, width, height = cap.get(cv2.cv.CAP_PROP_FRAME_COUNT), cap.get(cv2.cv.CAP_PROP_FPS), cap.get(cv2.cv.CAP_PROP_FRAME_WIDTH), cap.get(cv2.cv.CAP_PROP_FRAME_HEIGHT)

但是我收到了这个错误:

AttributeError: 'module' object has no attribute 'CAP_PROP_FRAME_COUNT'

我正在使用Python 2.7.5OpenCV 2.4.9


4
OpenCV 3.0将拥有适当的cv2.CAP_PROP_FRAME_COUNT属性(同时也会放弃已弃用的cv子模块)。 - berak
5个回答

20

在 OpenCV Python 模块的第一个版本中,常量都带有 CV_ 前缀。因此您可以使用 cv.CV_CAP_PROP_FRAME_COUNT 或者 cv2.cv.CV_CAP_PROP_FRAME_COUNT.


它似乎能够工作,但是...我感到相当困惑。为什么这些常量没有在cv2模块中定义? - ProGM
11
在OpenCV 2.x版本中,常量的形式似乎是cv2.cv.CV_CAP_X,而在OpenCV 3.x版本中则为cv2.CAP_X - cod3monk3y
3
糟糕的API,糟糕的OpenCV。 - acgtyrant

17

在OSX上运行macports(opencv @3.0.0_1+python27+tbb)时,您可以使用以下代码获取CAP_PROP_FRAME_HEIGHT和CAP_PROP_FRAME_WIDTH:

#!/opt/local/bin/python
import cv2 
vcap = cv2.VideoCapture()
# set frame width and height
vcap.set(cv2.CAP_PROP_FRAME_WIDTH, 480)
vcap.set(cv2.CAP_PROP_FRAME_HEIGHT, 640)
vcap.open(0)

5
在OpenCV 2.x中,这些属性以 CV_... 开头命名,例如 CV_CAP_PROP_FRAME_COUNT
在OpenCV 3.x和OpenCV 4.x中,这些属性的命名不包含 CV_...,例如 CAP_PROP_FRAME_COUNT

2

-1
import cv2

import cv2.cv as cv

使用cv2:

stream = cv2.VideoCapture(filename)

print stream.get(cv.CV_CAP_PROP_FRAME_COUNT)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接