簡體   English   中英

將openCV圖像轉換為Python中的PIL圖像(用於Zbar庫)

[英]convert openCV image into PIL Image in Python (for use with Zbar library)

我正試圖在我用OpenCV的相機方法提取的圖像上使用Zbar庫的QR碼檢測方法。 通常,QR碼檢測方法可以在我的計算機上使用圖像(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

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

我想我可能找到了答案。 我稍后會用結果編輯。

OpenCV到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

你想獲得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位B&W圖像。 此外,您需要將cv.CreateImage函數的參數從1(單通道圖像)更改為3(3通道= RGB)。

希望對你有效。 干杯

一種簡單的方法是直接交換頻道。 假設您正在嘗試在OpenCV格式和PIL格式之間轉換3通道圖像文件。 你可以使用:

img[...,[0,2]]=img[...,[2,0]]

通過這種方式,您不會受到cv2.cvtColor困擾,因為此功能僅適用於具有一定深度的圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM