0

VIPS を使用して、一部の画像を 2 倍または 3 倍縮小する必要があります。これは、単純なピクセル ビニング (ピクセル平均化) によって達成する必要があり、追加の平滑化や補間は必要ありません。

VIPS は、画像のサイズ変更 (サイズ変更、縮小、縮小、アフィンなど) のために、さまざまな抽象化レベルでいくつかの関数を提供します。また、これらの関数でさまざまな補間方法を提供します。

関数とメソッドのどの組み合わせが VIPS の単純なピクセル ビニングにつながるのだろうか。初歩的な例は非常に役に立ちます。

4

1 に答える 1

1

が必要shrinkです。整数引数を使用すると、ピクセルの単純なブロック平均化が行われます。

im = Vips.Image.new_from_file("somefile.jpg")
im = im.shrink(2, 2)
im.write_to_file("someotherfile.tif")

ピクセル形式は同じままなので、uchar 画像の場合、最も近い値に丸められた uchar 平均が得られます。何か違うものが必要な場合は、自分自身を浮かせたり、縮めたり、丸めたりするようにキャストします。

libvips は、画像の解像度 (1 インチあたりのピクセル数、または単位が何であれ) を、システムによって持ち運ばれ、ロードおよび保存操作で使用されるメタデータのビットとして扱いますが、vips 自体によって更新されることはありません。これは、画像の解像度は通常、距離ごとのピクセルの単純な測定よりも複雑であり、アプリケーションはライブラリよりも正しいことを行う可能性が高いためです。

分解能を読み上げたい場合は、 と を使用.xres.yresます。これらは常にピクセル/ミリ単位であり、ロードおよび保存時に適切な単位との間で変換されます。

print "im.xres =", im.xres, "ppm"

libvips イメージは不変であるため、xres/yres に割り当てるだけではなく、それらの値を変更して新しいイメージを作成する必要があります。新しい値を設定するには、 を使用します.copy()。舞台裏では、.copy()ポインタをコピーするだけなので、非常に高速です。上記の例は次のようになります。

im = Vips.Image.new_from_file("somefile.jpg")
im = im.shrink(2, 2)
im = im.copy(xres = im.xres / 2.0, yres = im.yres / 2.0)
im.write_to_file("someotherfile.tif")

マニュアルのそのセクションの紹介に、縮小と縮小の機能を説明するメモを追加しました。

于 2016-11-21T12:56:54.450 に答える