ImageMath
モジュール¶
ImageMath
モジュールは、複数の画像を受け取り結果を生成する「画像式」を評価するために使用できます。
ImageMath
は単層画像のみをサポートします。マルチバンド画像を処理するには、split()
メソッドまたはmerge()
関数を使用します。
例: ImageMath
モジュールの使用¶
from PIL import Image, ImageMath
with Image.open("image1.jpg") as im1:
with Image.open("image2.jpg") as im2:
out = ImageMath.lambda_eval(
lambda args: args["convert"](args["min"](args["a"], args["b"]), 'L'),
a=im1,
b=im2
)
out = ImageMath.unsafe_eval(
"convert(min(a, b), 'L')",
a=im1,
b=im2
)
- PIL.ImageMath.lambda_eval(expression, options, **kw)[ソース]¶
画像関数の結果を返します。
- パラメータ:
**expression** - 辞書を受け取る関数。
**options** - 関数の辞書に追加する値。名前は有効な Python 識別子である必要があります。非推奨。上記の例に示すように、代わりに1つ以上のキーワード引数を使用できます。
****kw** - 関数の辞書に追加する値。画像名と Image インスタンスをマッピングします。
- 戻り値:
式に応じて、画像、整数値、浮動小数点値、またはピクセルタプル。
- PIL.ImageMath.unsafe_eval(expression, options, **kw)[ソース]¶
画像式を評価します。
危険
これは、Python の
eval()
関数を使用して式文字列を処理するため、そのセキュリティリスクが伴います。これを考慮せずに式を処理することはお勧めしません。lambda_eval()
は、より安全な代替手段です。ImageMath
は単層画像のみをサポートします。マルチバンド画像を処理するには、split()
メソッドまたはmerge()
関数を使用します。- パラメータ:
**expression** - 標準の Python 式構文を使用する文字列。標準演算子に加えて、以下で説明する関数も使用できます。
**options** - 評価コンテキストに追加する値。名前は有効な Python 識別子である必要があります。非推奨。上記の例に示すように、代わりに1つ以上のキーワード引数を使用できます。
****kw** - 評価コンテキストに追加する値。画像名と Image インスタンスをマッピングします。
- 戻り値:
式に応じて、画像、整数値、浮動小数点値、またはピクセルタプル。
式構文¶
lambda_eval()
式は、画像と演算子を含む辞書を受け取る関数です。unsafe_eval()
式は標準の Python 式ですが、非標準環境で評価されます。
危険
unsafe_eval()
は、Python の eval()
関数を使用して式文字列を処理するため、そのセキュリティリスクが伴います。これを考慮せずに式を処理することはお勧めしません。lambda_eval()
は、より安全な代替手段です。
標準演算子¶
加算(+)、減算(-)、乗算(*)、除算(/)には、標準の算術演算子を使用できます。
モジュールは、単項マイナス(-)、剰余(%)、べき乗(**)演算子もサポートしています。
すべての演算は、必要に応じて32ビット整数または32ビット浮動小数点値を使用して行われます。たとえば、2つの8ビット画像を追加すると、結果は32ビット整数画像になります。浮動小数点定数を8ビット画像に追加すると、結果は32ビット浮動小数点画像になります。
以下で説明する convert()
、float()
、および int()
関数を使用して、変換を強制できます。
ビット演算子¶
モジュールは、個々のビットを操作する演算も提供します。これには、and(&)、or(|)、および排他的論理和(^)が含まれます。すべてのピクセルビットを反転(〜)することもできます。
ビット演算が適用される前に、オペランドは32ビット符号付き整数に変換されます。これは、通常のグレースケール画像を反転すると負の値が得られることを意味します。and(&)演算子を使用して、不要なビットをマスクできます。
ビット演算子は、浮動小数点画像では機能しません。
論理演算子¶
and
、or
、not
などの論理演算子は、個々のピクセルではなく、画像全体を操作します。
空の画像(すべてのピクセルがゼロ)は偽として扱われます。他のすべての画像は真として扱われます。
and
および or
は最後に評価されたオペランドを返す一方で、not は常にブール値を返すわけではないことに注意してください。
組み込み関数¶
これらの関数は、個々のピクセルに適用されます。
- abs(image)
絶対値。
- convert(image, mode)
画像を指定されたモードに変換します。モードは文字列定数として指定する必要があります。
- float(image)
画像を32ビット浮動小数点数に変換します。これは `convert(image, "F")` と同等です。
- int(image)
画像を32ビット整数に変換します。これは `convert(image, "I")` と同等です。
正しい結果を得るために必要な場合、1ビット画像と8ビット画像は自動的に32ビット整数に変換されることに注意してください。
- max(image1, image2)
最大値。
- min(image1, image2)
最小値。