在windows8.1的python中使用opencv和zbar来检测qr码



我使用的是opencv 3.1.0版本,带有zbar(截至本文的最新版本)和PIL(截至本文)

import zbar
import Image
import cv2
# create a reader
scanner = zbar.ImageScanner()
# configure the reader
scanner.parse_config('enable')
#create video capture feed
cap = cv2.VideoCapture(0)
while(True):
    ret, cv = cap.read()
    cv = cv2.cvtColor(cv, cv2.COLOR_BGR2RGB)
    pil = Image.fromarray(cv)
    width, height = pil.size
    raw = pil.tostring()
    # wrap image data
    image = zbar.Image(width, height, 'Y800', raw)
    # scan the image for barcodes
    scanner.scan(image)
    # extract results
    for symbol in image:
        # do something useful with results
        print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
# clean up
print "/n ...Done"

我不明白为什么这不起作用——它应该不断检查视频流当前帧中的二维码,如果它看到二维码,它就会解码并打印出里面的内容——我把打印出来的二维码举到我的网络摄像头前,但它不起作用,这表明我的相机打开了,有一个视频流正在发生,所以在while循环的某个地方出了问题

我以前尝试过,电脑上的qr码没有打印出来,它在上运行良好

我还试着让它用cv2.imshow("out",cv)向我显示当前帧,但当我这样做时,程序只显示了一个大的灰色正方形,它应该显示视频流,然后它冻结了,所以我不得不杀死Netbeans。

zbar适用于灰度图像。将cv = cv2.cvtColor(cv, cv2.COLOR_BGR2RGB)更改为cv = cv2.cvtColor(cv, cv2.COLOR_BGR2GRAY)

我猜你是在使用这个示例代码来构建你的程序。他们使用第15行的convert('L')进行颜色到灰度的转换。

相关内容

  • 没有找到相关文章

最新更新