Python can';转换为PIL后,从OpenCV图像解码QR码
我一直在使用OpenCV方法从我的相机中获取图像。我想使用zbar库对这些图像中的QR码进行解码,但在我将图像转换为PIL以供zbar处理后,解码似乎无法正常工作Python can';转换为PIL后,从OpenCV图像解码QR码,python,opencv,python-imaging-library,zbar,Python,Opencv,Python Imaging Library,Zbar,我一直在使用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
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()
如果您正在使用python,我建议您看看。您可以抄袭我们的条形码读取实现,也可以自己使用该库。用于使用zbar提取条形码 如果您使用python,我建议您看看。您可以抄袭我们的条形码读取实现,也可以自己使用该库。用于使用zbar提取条形码 您无需将OpenCV图像转换为PIL图像即可与zbar一起使用。。。您可以直接从OpenCV图像转到zbar,避免完全使用PIL 现在,我不知道当图像源来自相机时如何执行此操作,但如果从磁盘加载图像,则只需执行以下操作:
cv\u img=cv.LoadImageM(图像,cv.cv\u LOAD\u图像\u灰度)
宽度=cv_img.width
高度=cv_img.高度
原始=cv_img.tostring()
#包装图像数据
图像=zbar.图像(宽度、高度,'Y800',原始)
#扫描图像中的条形码
扫描器.扫描(图像)
#提取结果
对于图像中的符号:
#对结果做一些有用的事情
打印'decoded',symbol.type','symbol','%s''%symbol.data
看来您基本上必须执行以下操作才能正常工作:
- 使用LoadImageM而不是LoadImage
- 确保图像为灰度,以便使用cv.cv\u加载\u图像\u灰度
- 您不需要将OpenCV图像转换为PIL图像,就可以将其与zbar一起使用。。。您可以直接从OpenCV图像转到zbar,避免完全使用PIL
现在,我不知道当图像源来自相机时如何执行此操作,但如果从磁盘加载图像,则只需执行以下操作:
cv\u img=cv.LoadImageM(图像,cv.cv\u LOAD\u图像\u灰度)
宽度=cv_img.width
高度=cv_img.高度
原始=cv_img.tostring()
#包装图像数据
图像=zbar.图像(宽度、高度,'Y800',原始)
#扫描图像中的条形码
扫描器.扫描(图像)
#提取结果
对于图像中的符号:
#对结果做一些有用的事情
打印'decoded',symbol.type','symbol','%s''%symbol.data
看来您基本上必须执行以下操作才能正常工作:
- 使用LoadImageM而不是LoadImage
- 确保图像为灰度,以便使用cv.cv\u加载\u图像\u灰度