我一直在使用OpenCV方法从相机中获取图像。我想使用zbar库从那些图像中解码QR码,但是在我将图像转换为PIL以便由zbar处理之后,看起来似乎解码不起作用。
import cv2.cv as cv
import zbar
from PIL import Image
cv.NamedWindow("camera", 1)
capture = cv.CaptureFromCAM(0)
while True:
img = cv.QueryFrame(capture)
cv.ShowImage("camera", img)
if cv.WaitKey(10) == 27:
break
# create a reader
scanner = zbar.ImageScanner()
# configure the reader
scanner.parse_config('enable')
# obtain image data
pil = Image.fromstring("L", cv.GetSize(img), img.tostring())
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
cv.DestroyAllWindows()
答案 0 :(得分:3)
您不需要将OpenCV图像转换为PIL图像以便与zbar一起使用...您可以直接从OpenCV图像转到zbar并避免完全使用PIL。
现在我不知道你是怎么做的,当图像源来自相机,但如果你从磁盘加载图像,你所要做的就是:
cv_img = cv.LoadImageM(image, cv.CV_LOAD_IMAGE_GRAYSCALE)
width = cv_img.width
height = cv_img.height
raw = cv_img.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
看来你基本上必须做以下工作才能发挥作用:
答案 1 :(得分:1)
如果您在python中工作,我建议您查看SimpleCV。您可以选择条形码读取或自己使用库。 Here is the source用zbar拉出条形码。