0

Python で PIL を使用して 48 ビット (RGB) TIFF ファイル (チャネルあたり 16 ビット) を作成したいと考えています。ただし、個々のチャネルを 16 ビットとして保存する方法を見つけたにもかかわらず、これらを 1 つの 48 ビット RGB イメージにマージすることはできません。

In [3]: import numpy as np

In [4]: from PIL import Image

In [5]: r = np.array([[1,2],[3,4]], dtype=np.uint16)

In [6]: i = Image.fromarray(r, mode='I;16')

In [7]: Image.merge("RGB", (i,i,i))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-35aa00ddbb2e> in <module>()
----> 1 Image.merge("RGB", (i,i,i))

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/Image.pyc in merge(mode, bands)
   2059     for im in bands[1:]:
   2060         if im.mode != getmodetype(mode):
-> 2061             raise ValueError("mode mismatch")
   2062         if im.size != bands[0].size:
   2063             raise ValueError("size mismatch")

ValueError: mode mismatch

これを解決する方法についてのアイデアはありますか?それとも、チャンネルを個別の 16 ビット ファイルとして保存し、それらを別のソフトウェアと組み合わせる必要がありますか?

4

2 に答える 2

3

PIL は出力用の 48 ビット RGB をサポートしていません。サポートされているモードのリストを参照してください。完了するためにここで繰り返されます。

  • 1 (1 ビット ピクセル、白黒、1 バイトあたり 1 ピクセルで格納)
  • L (8 ビット ピクセル、白黒)
  • P (カラー パレットを使用して他のモードにマッピングされた 8 ビット ピクセル)
  • RGB (3x8 ビット ピクセル、True Color)
  • RGBA (4x8 ビット ピクセル、透過マスク付きトゥルー カラー)
  • CMYK (4x8 ビット ピクセル、色分解)
  • YCbCr (3x8 ビット ピクセル、カラー ビデオ形式)
  • I (32 ビットの符号付き整数ピクセル)
  • F (32 ビット浮動小数点ピクセル)

PIL は、 LA (アルファ付きの L)、 RGBX (パディング付きのトゥルー カラー)、およびRGBa (事前に乗算されたアルファ付きのトゥルー カラー)など、いくつかの特別なモードの限定的なサポートも提供します。ただし、PIL はユーザー定義モードをサポートしていません。上にリストされていないバンドの組み合わせを処理する場合は、一連の Image オブジェクトを使用します。

また、PIL は48 ビット RGB のインポートをサポートしていますが、インポート中に 32 ビット RGBA に変換することにも注意してください (unpackRGB16B 関数を参照)。

于 2013-07-09T22:11:59.560 に答える