2012-11-27 56 views
21

我試圖在OpenCV的相機方法中提取的圖像上使用Zbar庫的QR碼檢測方法。通常情況下,QR碼檢測方法可以在我的計算機上處​​理圖像(jpg,png等),但我猜OpenCV的捕獲幀是不同的。
有沒有一種方法可以將拍攝到的幀變成PIL圖像?將openCV圖像轉換爲Python中的PIL圖像(用於Zbar庫)

謝謝。

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 

回答

56

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

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

的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

+0

到目前爲止,我遇到了一些麻煩,其中轉換圖像是不是真的我拍攝的圖像。 – QuantumRich

+0

嘿,我有和你一樣的問題,這個工作,但實際接受的答案沒有。您應該將其標記爲已接受 –

4

你想獲得一個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)。

希望它適合你。 乾杯