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