2

最初にディスクに書き込むことなく、 PythonMagick.Image インスタンスからピクセルデータを取得する方法を知っている人はいますか?

たとえば、次を使用して画像を読み取ることができます。

import PythonMagick
im = PythonMagick.Image('image.jp2')

非圧縮の画像データを取得して、NumPy や matplotlib などで使用できるようにしたいと考えていますが、これを行う方法が見つからないようです。私はmatplotlibまたはPILを直接使用しますが、私が読んでいる画像形式はJPEG 2000で、私の知る限りPythonMagickでのみサポートされています。

助言がありますか?

4

1 に答える 1

3

免責事項: 私は現在 PythonMagick を構築しておらず、専門家でもないので、(1) 以下のいずれかまたはすべてが間違っている可能性があり、(2) あなたが望むより具体的でないことは確かです。 3) 他の誰かがよく知っている場合は、既にここにある回答を見て、彼らが先延ばしにしないことを願っています。ともかく:

コードをざっと見ると、クラスのpixelColorメソッドを使用してピクセル値を 1 つずつ読み取ることができるように見えます。これは、 R、G、B コンポーネントを抽出できる値をImage返します。PythonMagick.Color基礎となる C++ ライブラリはImage::writePixels、 にも存在する を使用して、一度に多数のピクセルを読み取ることをサポートしていますPythonMagick.Image。しかし、そのメソッドの適切な使用は、PythonMagick に実装されていない他のものに依存すると思います。一度に 1 ピクセルずつ読み取るよりもはるかに効率的だったに違いないので、これは残念です。

あるいは、おそらくより良いのは、画像の内容をメモリ内のオブジェクトに書き込むことができるように見えますPythonMagick.Blob。これは、基本的に、ファイルなしでのみファイルに書き込むのと同じです:-)。ファイルに書き込むときと同じように、どの形式で書き込むかを選択できます。get_blob_dataの内容を抽出するために呼ばれるものがあるようBlobです。このようなもの:

im = PythonMagick.Image('image.jp2')
blob = PythonMagick.Blob()
im.write(blob, "png")
data = PythonMagick.get_blob_data(blob)

結果dataは、バイトが画像のバイナリ表現であるPython文字列だと思います。(文字列型が 8 ビットの Python 2.x を使用していると仮定しています。PythonMagick が 3.x で動作するかどうかはわかりません。) 基本的に生のピクセル データである形式がいくつかあると思います。「RGB」を試してください。その後、多くの方法でコンテンツを抽出できますstruct.unpack

于 2011-03-31T14:59:44.197 に答える