convertissez l'image openCV en Image PIL en Python (pour utilisation avec la bibliothèque Zbar))

j'essaie d'utiliser les méthodes de détection de code QR de la bibliothèque Zbar sur les images que j'extrais avec les méthodes de caméra D'OpenCV. Normalement, les méthodes de détection de code QR fonctionnent avec des images (jpg, png, etc.) sur mon ordinateur, mais je suppose que les images capturées par OpenCV sont différentes.

Y a-t-il un moyen de transformer le cadre capturé en Image PIL?

je vous Remercie.

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
23
demandé sur QuantumRich 2012-11-27 05:39:55

3 réponses

avec le python CV2, vous pouvez aussi faire ceci:

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()
65
répondu s_kanawat 2013-08-10 05:37:41

je pense que j'ai peut-être trouvé la réponse. Je vais modifier plus tard avec les résultats.

OpenCV to PIL Image

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())

Source:http://opencv.willowgarage.com/documentation/python/cookbook.html

8
répondu QuantumRich 2012-11-27 01:44:16

essayez-vous d'obtenir une image RVB? Si c'est le cas, vous devez modifier vos paramètres à partir de ceci:

cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 1)
pi = Image.fromstring("L", cv.GetSize(cv_im), cv_im.tostring())

à:

cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 3)
pi = Image.fromstring("RGB", cv.GetSize(cv_im), cv_im.tostring())

puisqu'il est documenté presque nulle part, mais le paramètre 'L' de L'Image.fromstring est pour 8-bit B&W images. En outre, vous devez changer l'argument de votre cv.CreateImage fonction à partir de 1 (un seul canal de l'image) 3 (3 canaux=RGB).

j'Espère que cela fonctionne pour vous. Acclamations

4
répondu Raoul 2013-05-28 23:10:04