21.2. imageop --- 生の画像データを操作する

バージョン 2.6 で非推奨: imageop モジュールは Python 3 で削除されました。

imageop モジュールは画像に関する便利な演算が含まれています。Python 文字列に保存されている 8 または 32 ビットのピクセルから構成される画像を操作します。これは gl.lrectwrite()imgfile モジュールが使用しているものと同じフォーマットです。

このモジュールでは以下の変数と関数を定義しています:

exception imageop.error

この例外はピクセル当りの未知のビット数などのすべてのエラーで発生させられます。

imageop.crop(image, psize, width, height, x0, y0, x1, y1)

image の選択された部分を返します。 imagewidth × height の大きさで、 psize バイトのピクセルから構成されなければなりません。 x0, y0, x1 および y1gl.lrectread() パラメータと同様です。すなわち、境界は新画像に含まれます。新しい境界は画像の内部である必要はありません。旧画像の外側になるピクセルは値をゼロに設定されます。 x0x1 より大きければ、新画像は鏡像反転されます。y軸についても同じことが適用されます。

imageop.scale(image, psize, width, height, newwidth, newheight)

image を大きさ newwidth × newheight に伸縮させて返します。補間は行われません。ばかばかしいほど単純なピクセルの複製と間引きを行い伸縮させます。そのため、コンピュータで作った画像やディザ処理された画像は伸縮した後見た目が良くありません。

imageop.tovideo(image, psize, width, height)

垂直ローパスフィルタ処理を画像全体に行います。それぞれの目標ピクセルを垂直に並んだ二つの元ピクセルの平均を計算することで行います。このルーチンの主な用途としては、画像がインターレース走査のビデオ装置に表示された場合に極端なちらつきを抑えるために用います。そのため、この名前があります。

imageop.grey2mono(image, width, height, threshold)

全ピクセルを二値化することによって、深さ 8 ビットのグレースケール画像を深さ 1 ビットの画像へ変換します。処理後の画像は隙間なく詰め込まれ、おそらく mono2grey() の引数としてしか使い道がないでしょう。

imageop.dither2mono(image, width, height)

(ばかばかしいほど単純な) ディザ処理アルゴリズムを用いて、8 ビットグレースケール画像を 1 ビットのモノクロ画像に変換します。

imageop.mono2grey(image, width, height, p0, p1)

1 ビットモノクロ画像を 8 ビットのグレースケールまたはカラー画像に変換します。入力で値ゼロの全てのピクセルは出力では値 p0 を取り、値 1 の入力ピクセルは出力では値 p1 を取ります。白黒のモノクロ画像をグレースケールへ変換するためには、値 0255 をそれぞれ渡してください。

imageop.grey2grey4(image, width, height)

ディザ処理を行わずに、8 ビットグレースケール画像を 4 ビットグレースケール画像へ変換します。

imageop.grey2grey2(image, width, height)

ディザ処理を行わずに、8 ビットグレースケール画像を 2 ビットグレースケール画像に変換します。

imageop.dither2grey2(image, width, height)

ディザ処理を行い、8 ビットグレースケール画像を 2 ビットグレースケール画像へ変換します。 dither2mono() については、ディザ処理アルゴリズムは現在とても単純です。

imageop.grey42grey(image, width, height)

4 ビットグレースケール画像を 8 ビットグレースケール画像へ変換します。

imageop.grey22grey(image, width, height)

2 ビットグレースケール画像を 8 ビットグレースケール画像へ変換します。

imageop.backward_compatible

0 にセットすると、このモジュールの関数は、リトルエンディアンのシステムで以前のバージョンと互換性のない方法でマルチバイトピクセル値を表現するようになります。このモジュールはもともと SGI 向けに書かれたのですが、SGI はビッグエンディアンのシステムであり、この変数を設定しても何の影響もありません。とはいえ、このコードはもともとどこでも動作するように考えて作られたわけではないので、バイトオーダに関する仮定が相互利用向けではありませんでした。この変数を 0 にすると、リトルエンディアンのシステムではバイトオーダを反転して、ビッグエンディアンと同じにします。