c#で単独.exeを作る方法をしり、画像ファイルをグレースケールに変換する外部コマンドを作成したのですが、よくよく考えるとコンソールで画像変換をする場合ImageMagickが定番で、わざわざC#で作る必要がないことに気が付きました。

縮小処理はImageMagickを使いたいと思います。

C#で作るグレースケールへ変換するコンソールアプリ
コンソールで実行するシンプルな画像変換アプリを作りたいと思います。C#でOpenCVSharpを使い画像ファイルをグレスケールに変換し、png形式で保存する外部コマンドになります。ソースコードファイル名:grayconv.csproj<Pr...
縮小処理はImageMagickを使いたいと思います。
縮小
それではImageMagickで画像を縮小する書式は以下のようになります。
magick in.png -filter Lanczos -resize 50% out.png
補完方法は高品質なLanczosを指定しています。filterはオプションですの省略可能です。
縮小処理しか試していませんが、倍率を200%などとすると拡大処理になると思われます
PowerShell的一括処理
ls *.png | % { magick $_.FullName -filter Lanczos -resize 50% ("{0}.resize.png" -f $_.FullName) }
サフィックスとして「.resize.png」を連結しただけなので、パスに.pngが2回出てきてしまうのが好みでないですが、とりあえず一括処理されるはず。出力するディレクトリを用意しそちらに出力するほうが一般的だと思います。
2値化
閾値50%で2値化
magick 加工前画像.png -threshold 50% 加工後画像.png
グレースケール化
magick 加工前画像.png -colorspace Gray 加工後画像.png
減色
4bit(16色?)に減色
magick 加工前画像.png -depth 4 加工後画像.png
画像の情報を取得
magick identify -verbose 画像ファイル.png
2つの画像ファイルの差分
magick 画像ファイル1.png 画像ファイル2.png -compose difference -composite 差分画像.png
縮小→シャープ
magick 加工前.png -filter Lanczos -define filter:blur=0.99 -distort Resize 50% 加工後.png
magickコマンドのオプションはパイプライン状に連結することで、順番にフィルターが実行されるようです。
グレーケール化→ポスタリゼーション(16色へ減色)
magick 加工前.png -colorspace Gray -posterize 16 加工後.png
水平方向で2分割
magick input.png -crop 50%x100% +repage +adjoin output_%d.png
グレースケール化→ガンマ補正→縮小
出力先はgrayというサブディレクトリに元のファイルと同盟で出力される。
ls *.png -File | % { $n = $_.Name; magick $n -colorspace Gray -gamma 1.5 -resize 25% "gray/$n" }
コメント