Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python can';转换为PIL后,从OpenCV图像解码QR码_Python_Opencv_Python Imaging Library_Zbar - Fatal编程技术网

Python can';转换为PIL后,从OpenCV图像解码QR码

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

我一直在使用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()

如果您正在使用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灰度

      我希望避免使用简单的CV,因为我一直在使用open CV用于其他目的,我不希望重新实现我已经完成的功能。有一个简单的CV方法,我想找到它的等价物。它是.getpil()方法。SimpleCV应该可以与OpenCV进行良好的互操作(因为它构建在OpenCV之上),您唯一关心的是依赖关系。如果你能处理DEP,你应该很好。我更多的是用一个开放式CV捕获的图像做一些事情,比如颜色跟踪,我需要使用相同的图像来进行解码。我想避免使用简单的CV,因为我一直在用开放式CV做其他用途,我不想重新实现我所做的功能。有一个简单的CV方法,我想找到它的等价物。它是.getpil()方法。SimpleCV应该可以与OpenCV进行良好的互操作(因为它构建在OpenCV之上),您唯一关心的是依赖关系。如果你能处理DEP,你应该很好。我更多的是用一个开放的CV捕获图像做一些事情,比如颜色跟踪,我需要使用相同的图像来解码。