【问题标题】:Updating code from openCV to openCV2将代码从 openCV 更新到 openCV2
【发布时间】:2015-09-13 14:21:03
【问题描述】:

我正在尝试在 python 中将一些代码从 openCV 更新为 openCV2。原代码如下:

self.capture = cv.CaptureFromCAM(0)
cv.SetCaptureProperty( self.capture, cv.CV_CAP_PROP_FRAME_WIDTH, 160 );
cv.SetCaptureProperty( self.capture, cv.CV_CAP_PROP_FRAME_HEIGHT, 120 );

我为 openCV2 编写的代码是这样的:

self.capture = cv2.VideoCapture(0)
cv2.VideoCapture.set( CV_CAP_PROP_FRAME_WIDTH, 160 );
cv2.VideoCapture.set( CV_CAP_PROP_FRAME_HEIGHT, 120 );

但是这不起作用,我收到一条错误消息:

cv2.VideoCapture.set(CV_CAP_PROP_FRAME_WIDTH, 160); AttributeError: 'builtin_function_or_method' 对象没有属性 'set'

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    我删除了.cv.CV_,它起作用了。

    变化:

    cv2.cv.CV_CAP_PROP_FRAME_HEIGHT
    

    到:

    cv2.CAP_PROP_FRAME_HEIGHT
    

    【讨论】:

      【解决方案2】:

      此答案是使用建议的答案/教程的组合构建的

      使用 cv2 - 更改通过网络摄像头捕获的视频的帧分辨率

      import cv2
      import time
      
      cam = cv2.VideoCapture(0)
      
      print "Frame default resolution: (" + str(cam.get(cv2.CAP_PROP_FRAME_WIDTH)) + "; " + str(cam.get(cv2.CAP_PROP_FRAME_HEIGHT)) + ")"
      
      #set Frame resolution to 1280; 720
      cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
      cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
      print "Frame resolution set to: (" + str(cam.get(cv2.CAP_PROP_FRAME_WIDTH)) + "; " + str(cam.get(cv2.CAP_PROP_FRAME_HEIGHT)) + ")"
      
      r, frame = cam.read()
      
      print('Resolution: ' + str(frame.shape[0]) + ' x ' + str(frame.shape[1]))
      

      Screenshot: default resolution and changed resolution

      【讨论】:

      • 你能把你用过的答案和教程贴出来吗?
      【解决方案3】:

      试试这个。它会起作用的。

      self.capture.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 160)
      

      【讨论】:

      • 此处相同:“CV_CAP_PROP_FRAME_WIDTH”上的全局名称错误
      • 好吧,我实际上得到了这个工作,但这仍然使用旧的 openCV 库,因为你使用 cv2.cv.....
      • 因为这个原因,它没有使用旧库,cv2.cv 只是一个用于从原始CV_SOMETHING 转换为python 变体cv.SOMETHING 的常量的命名空间。
      【解决方案4】:

      我遇到了同样的问题,能够让它工作:

      cap = cv2.VideoCapture(0)
      
      cap.set(cv2.CAP_PROP_FRAME_WIDTH, 160);
      cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 120);
      

      【讨论】:

      • 不幸的是,它实际上并没有设置它捕获的帧尺寸。
      【解决方案5】:

      似乎 CV_CAP_PROP_POS_MSEC 和其他类似的属性在您安装的 Opencv 版本中已被弃用,为了解决问题,例如此属性,将其更改为 cv2.CAP_PROP_POS_MSEC 和其他类似的属性。在 Opencv 3.1 上对我有用

      【讨论】:

      • 谢谢 - 我一直遇到这个问题,但忘记了解决方案 - 感谢!
      【解决方案6】:

      您需要处理初始调用返回的实例,而不是类

      self.capture.set(cv.CV_CAP_PROP_FRAME_WIDTH, 160)
      

      【讨论】:

      • 我现在明白你的意思了,我正在查看 openCV 的文档,我最初不明白,但是,它抛出了另一个错误: NameError: global name 'CV_CAP_PROP_FRAME_WIDTH' is not defined
      • 您不会像在原始代码中那样将 cv 前缀放入迁移的代码中。
      • 我在 'CV_CAP_PROP_FRAME_WIDTH' 上仍然遇到相同的全局名称错误
      • 我非常怀疑这一点。因为错误消息应该是“AttributeError:module cv has no attribute CV_CAP ....”。所以我猜这并不是你编辑/显示的代码部分。
      • 好的,这里是确切的代码: self.capture.set(cv.CV_CAP_PROP_FRAME_WIDTH, 160) 这会引发全局名称错误,但 self.capture.set(cv2.CV_CAP_PROP_FRAME_WIDTH, 160) 会引发属性错误,就像你说的那样
      猜你喜欢
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多