在Python中将openCV图像转换为PIL图像(用于Zbar库)

2024-06-16 09:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Zbar库的QR码检测方法对我用OpenCV的相机方法提取的图像进行检测。通常,二维码检测方法在我的电脑上处理图像(jpg、png等),但我猜OpenCV捕获的帧是不同的。
有没有办法把捕获的帧变成PIL图像?

谢谢你。

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

Tags: 方法图像imageimportimgscanpilwidth
3条回答

使用python CV2,您还可以执行以下操作:

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

你想获取RGB图像吗?如果是这种情况,则需要更改参数:

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

因为几乎没有文档记录,但是Image.fromstring的'L'参数用于8位黑白图像。此外,还需要将cv.CreateImage函数的参数从1(单通道图像)更改为3(3通道=RGB)。

希望对你有用。 干杯

我想我可能找到了答案。稍后我将编辑结果。

打开cv到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())

来源:http://opencv.willowgarage.com/documentation/python/cookbook.html

相关问题 更多 >