Imagerで画像を2値化する

Imager::Enginesていうのが強力過ぎて、
なんか良く分からないんだけど、2値化とかするのに便利っぽい。

何が良く分からないかというと、
Postfix expressionsを使わなくちゃいけなくて、
たぶん、逆ポーランド記法のことだと思う。

で、こんな感じコードを書く。

use v5.14;
use strict;
use warnings;

use Imager;

my $src = Imager->new( file => $ARGV[0] ) or die Imager->errstr();

my $newimg = Imager::transform2( {
    channels => 1,
    rpnexpr => 'x y getp1 !pix @pix hue 180 gt @pix hue 52 lt or @pix sat 0.1 lt or 255 255 255 rgb 0 0 0 rgb ifp'
}, $src );

$newimg->write( file => "dst.png" );

すると、こんな感じで2値化されて便利。

入力画像
20140722_src

出力画像
20140722_dst

やっていることは、赤っぽい色 or 彩度の低いピクセルを抽出している。

あと、トマトを食べる時は、MacBook Airの前で食べない方が良い。
じゃないと、キーボードにトマトの中身が降り掛かることになる。

おしまい。

Leave a Comment