pyzbar - convertir imagen openCV en imagen PIL en Python(para usar con la biblioteca Zbar)
zbar raspberry pi (3)
¿Estás tratando de obtener una imagen RGB? Si ese es el caso, debe cambiar sus parámetros a partir de esto:
cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 1)
pi = Image.fromstring("L", cv.GetSize(cv_im), cv_im.tostring())
a ese:
cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 3)
pi = Image.fromstring("RGB", cv.GetSize(cv_im), cv_im.tostring())
ya que está documentado casi en ninguna parte, pero el parámetro ''L'' de Image.fromstring es para imágenes en blanco y negro de 8 bits. Además, debe cambiar el argumento de su función cv.CreateImage de 1 (imagen de canal único) a 3 (3 canales = RGB).
Espero que funcione para ti. Aclamaciones
Intento usar los métodos de detección del código QR de la biblioteca Zbar en las imágenes que extraigo con los métodos de cámara de OpenCV. Normalmente, los métodos de detección de códigos QR funcionan con imágenes (jpg, png, etc.) en mi computadora, pero supongo que los marcos capturados de OpenCV son diferentes.
¿Hay alguna forma de convertir el fotograma capturado en una imagen PIL?
Gracias.
from PIL import Image
import zbar
import cv2.cv as cv
capture = cv.CaptureFromCAM(1)
imgSize = cv.GetSize(cv.QueryFrame(capture))
img = cv.QueryFrame(capture)
#SOMETHING GOES HERE TO TURN FRAME INTO IMAGE
img = img.convert(''L'')
width, height = img.size
scanner = zbar.ImageScanner()
scanner.parse_config(''enable'')
zbar_img = zbar.Image(width, height, ''Y800'', img.tostring())
# scan the image for barcodes
scanner.scan(zbar_img)
for symbol in zbar_img:
print symbol.data
Con el pitón CV2, también puedes hacer esto:
import Image, cv2
cap = cv2.VideoCapture(0) # says we capture an image from a webcam
_,cv2_im = cap.read()
cv2_im = cv2.cvtColor(cv2_im,cv2.COLOR_BGR2RGB)
pil_im = Image.fromarray(cv2_im)
pil_im.show()
Creo que puedo haber encontrado la respuesta. Voy a editar más adelante con los resultados.
Imagen de OpenCV a PIL
import Image, cv
cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 1)
pi = Image.fromstring("L", cv.GetSize(cv_im), cv_im.tostring())
Fuente: http://opencv.willowgarage.com/documentation/python/cookbook.html