36

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
4

4 に答える 4

90

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()
于 2013-08-10T05:37:41.920 に答える
9

私は答えを見つけたかもしれないと思います。後で結果を編集します。

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

于 2012-11-27T01:44:16.110 に答える
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ビットの白黒画像用です。さらに、cv.CreateImage関数の引数を1(シングルチャンネル画像)から3(3チャンネル= RGB)に変更する必要があります。

それがあなたのために働くことを願っています。乾杯

于 2013-05-28T23:10:04.603 に答える
1

簡単な方法は、チャネルを直接交換することです。3チャンネルの画像ファイルをOpenCV形式とPIL形式の間で変換しようとしているとします。あなたはただ使うことができます:

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

cv2.cvtColorこのように、この機能は特定の深さの画像でのみ機能するため、煩わされることはありません。

于 2019-01-23T06:27:57.297 に答える