AttributeError:'模块'对象没有属性' QueryFrame'

时间:2015-07-22 07:24:30

标签: python opencv

我正在测试使用python和 openCV 3.0 实时解码qr代码。但是现在我在终端上收到错误消息。我试图在互联网上搜索,但我仍然无法解决它。我能知道这个错误吗。

这是我的Python代码:

import cv2 as cv

import zbar

def scanner_procces(frame,set_zbar):    
    set_width = 100.0 / 100
    set_height = 90.0 / 100

    coord_x = int(frame.width * (1 - set_width)/2)
    coord_y = int(frame.height * (1 - set_height)/2)
    width = int(frame.width * set_width)
    height = int(frame.height * set_height)

    get_sub = cv.GetSubRect(frame, (coord_x+1, coord_y+1, width-1, height-1))

    cv.Rectangle(frame, (coord_x, coord_y), (coord_x + width, coord_y + height), (255,0,0))

    cm_im = cv.CreateImage((get_sub.width, get_sub.height), cv.IPL_DEPTH_8U, 1)
    cv.ConvertImage(get_sub, cm_im)
    image = zbar.Image(cm_im.width, cm_im.height, 'Y800', cm_im.tostring())

    set_zbar.scan(image)
    for symbol in image:
            print '\033[1;32mResult : %s symbol "%s" \033[1;m' % (symbol.type,symbol.data)

    cv.ShowImage("webcam", frame)
    cv.WaitKey(10)


if __name__ == "__main__":

    cv.namedWindow("webcam", cv.WINDOW_AUTOSIZE)
    capture = cv.VideoCapture(0)
    set_zbar = zbar.ImageScanner()
    while True:
        frame = cv.QueryFrame(capture)
        scanner_procces(frame,set_zbar)

这是错误代码:

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

这是回溯消息:

init done 
opengl support available 
 select timeout
Traceback (most recent call last):
  File "realtimetestwebcam.py", line 38, in <module>
    scanner_procces(frame,set_zbar)
  File "realtimetestwebcam.py", line 9, in scanner_procces
    coord_x = int(frame.width * (1 - set_width)/2)
AttributeError: 'numpy.ndarray' object has no attribute 'width'

是因为opencv版本的错误吗?谢谢。

2 个答案:

答案 0 :(得分:0)

使用cv2时,您应该使用

cv2.VideoCapture.read

而不是QueryFrame。有关详细信息,请参阅here 您可以尝试此代码

capture = cv.VideoCapture(0)
set_zbar = zbar.ImageScanner()
while True:
    _,frame = capture.read()

<强>更新

此错误消息

  

AttributeError:&#39; numpy.ndarray&#39;对象没有属性&#39; width&#39;

你得到因为它改变了返回值的格式。 cv frame是具有某种类型的对象, cv2 framenp.ndarray。您可以使用width method获取其维度,而不是shape attr。从 cv 迁移到 cv2 不是一个简单的过程,需要重写部分代码。

答案 1 :(得分:0)

我通过安装python-opencv软件包

解决了这个问题
sudo apt-get install python-opencv

这解决了我的整个问题。感谢kvorobiev一直帮助我。