【问题标题】:CAP_PROP_FRAME_COUNT constant is missing in opencv `cv2` python moduleopencv `cv2` python 模块中缺少 CAP_PROP_FRAME_COUNT 常量
【发布时间】:2014-12-20 22:57:01
【问题描述】:

如何在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

【问题讨论】:

  • opencv3.0 将具有正确的 cv2.CAP_PROP_FRAME_COUNT(并且还将丢弃已弃用的 cv 子模块)

标签: python opencv video-capture attributeerror


【解决方案1】:

在 OpenCV 2.x 中,这些属性以 CV_... 开头命名,如 CV_CAP_PROP_FRAME_COUNT

在 OpenCV 3.x 和 OpenCV 4.x 中,这些属性的命名不带 CV_...,如 CAP_PROP_FRAME_COUNT

【讨论】:

    【解决方案2】:

    在 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)
    

    【讨论】:

      【解决方案3】:

      http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-get

      #3. CV_CAP_PROP_FRAME_WIDTH
      print "\t CAP_PROP_FRAME_WIDTH:     ",cap.get(3)
      #4. CV_CAP_PROP_FRAME_HEIGHT
      print "\t CAP_PROP_FRAME_HEIGHT:    ",cap.get(4)
      

      http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-set

      #3. CV_CAP_PROP_FRAME_WIDTH
      cap.set(3,320)
      #4. CV_CAP_PROP_FRAME_HEIGHT
      cap.set(4,240)
      

      【讨论】:

        【解决方案4】:
        import cv2
        
        import cv2.cv as cv
        

        使用 cv2:

        stream = cv2.VideoCapture(filename)
        
        print stream.get(cv.CV_CAP_PROP_FRAME_COUNT)
        

        【讨论】:

          【解决方案5】:

          OpenCV python 模块的第一个版本中的常量有一个CV_ 前缀。因此,您可以使用cv.CV_CAP_PROP_FRAME_COUNTcv2.cv.CV_CAP_PROP_FRAME_COUNT

          【讨论】:

          • 它似乎有效,但是......我很困惑。为什么cv2 模块中没有定义这些常量?
          • 在 OpenCV 2.x 中,常量的形式似乎是 cv2.cv.CV_CAP_X,而在 OpenCV 3.x 中,它们是 cv2.CAP_X
          • API 错误,OpenCV 错误。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 2018-07-13
          • 1970-01-01
          • 2014-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多