1

ドキュメントに記載されているように:

IplImage.imageData(OpenCVライブラリから):

位置合わせされた画像データへのポインタ

Image.tostring()(Python PILから):

標準の「raw」エンコーダーを使用して、ピクセルデータを含む文字列を返します。

Image.tostring()との結果の違いは何IplImage.imageDataですか?IplImage.imageDataPythonで返されるものとまったく同じデータを取得したい場合はどうすればよいですか?

編集: 明確にするために、インターネットからデータを受信するPythonサービスがあり、OpenCVにはディスクではなくメモリから画像を読み込む簡単な方法がないため、PILを使用して画像を読み込む必要があります。

4

2 に答える 2

3

opencvのメモリから画像を読み取る簡単な方法があります。

cvの使用(バージョン1)

import cv

# First get the compressed image data. This can be retrieved from
# a socket, a file, or whatever you want.
jpegdata = open('myimage.jpg','r').read()

# Create an opencv matrix to hold the compressed data
cvmat = cv.CreateMatHeader(1, len(jpegdata), cv.CV_8U)
cv.SetData(cvmat, jpegdata, len(jpegdata))

# Now let opencv decompress your image
cvimage = cv.DecodeImage(cvmat, cv.CV_LOAD_IMAGE_COLOR)

cv2(およびnumpy)の使用

import cv2
import numpy as np

# First get the compressed image data. This can be retrieved from
# a socket, a file, or whatever you want.    
jpegdata = open('myimage.jpg','r').read()

# Convert your compressed data to a numpy array
nparr = np.fromstring(jpegdata, np.uint8)

# Now use imdecode to decompress it
cvimage = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)
于 2012-09-03T10:57:28.390 に答える
1

Opencvイメージでは、ピクセルデータはBGRとして順序付けられますが、PILではRGBです。以下のように、PIL画像データをopencvに変換できます。

import Image, cv
pi = Image.open('building.jpg')       # PIL image
cv_im = cv.CreateImageHeader(pi.size, cv.IPL_DEPTH_8U, 3)
cv.SetData(cv_im, pi.tostring())

詳細については、こちらをご覧ください。

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

于 2012-08-06T08:12:21.813 に答える