我正在测试使用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版本的错误吗?谢谢。
答案 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 frame
为np.ndarray
。您可以使用width
method获取其维度,而不是shape
attr。从 cv 迁移到 cv2 不是一个简单的过程,需要重写部分代码。
答案 1 :(得分:0)
我通过安装python-opencv软件包
解决了这个问题sudo apt-get install python-opencv
这解决了我的整个问题。感谢kvorobiev一直帮助我。