mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

ImageMagick - convert コマンドで画像変換!

[ pc_tips ] [ 画像 ]

こんばんは。

コマンドラインから画像処理ソフト ImageMagick の convert コマンドを使用して、画像を色々と変換してみました。

convert コマンドでどのような変換ができるかを確認するためです。

今回、やってみたことは以下の通り。

0. 前提条件

  • Linux Mint 14 (64bit) での作業・動作確認を想定。
  • 画像処理処理ソフト ImageMagick がインストール済みである。
  • 画像に関する用語については説明しない。必要であれば、別途お調べください。
  • 今回使用する画像以下のような画像(ファイル名:"test.jpg", 幅:320px, 高さ:240px)

test

サイズ変更

画像のサイズをピクセル値を指定して変更する場合は、以下のようにする。

1
$ convert test.jpg -geometry 240x180 test_resize_1.jpg

test_resize_1

画像のサイズを比率を指定して変更する場合は、以下のようにする。

1
$ convert test.jpg -geometry 100%x70% test_resize_2.jpg

test_resize_2

80%x80% のように幅・高さが同じなら 80% と記述してもよい。
また、元の画像のサイズより小さくなる場合のみ適用したいときは 240x180> と、元の画像のサイズより大きくなる場合のみ適用したいときは 240x180< とするようだ。

上下反転

画像を上下反転させたい場合は、以下のようにする。

1
$ convert test.jpg -flip test_flip.jpg

test_flip

左右反転

画像を左右反転させたい場合は、以下のようにする。

1
$ convert test.jpg -flop test_flop.jpg

test_flop

回転(時計回り)

画像を時計回りに回転させたい場合は、以下のようにする。
半時計回りならマイナス値で指定する。

1
$ convert test.jpg -rotate 30 test_rotate.jpg

test_rotate

枠付け

画像の周りに単純に色を付ける場合は、以下のようにする。

1
$ convert test.jpg -bordercolor blue -border 10x10 test_border.jpg

test_border

画像の周りに立体的な枠を付ける場合は、以下のようにする。

1
$ convert test.jpg -mattecolor yellow -frame 10x10+4+4 test_frame.jpg

test_frame

画像が浮き上がったように見える枠を付ける場合は、以下のようにする。

1
$ convert test.jpg -raise 10x10 test_raise.jpg

test_raise

モノクロ変換

画像をモノクロ画像に変換するには、以下のようにする。

1
$ convert test.jpg -monochrome test_monochrome.jpg

test_monochrome

二値化

画像を二値化変換するには、以下のようにする。
-threshold の設定値は画像の輝度に合わせて調節する。

1
$ convert test.jpg -threshold 10000 test_threshold.jpg

test_threshold

メディアンフィルタ

画像にメディアンフィルタをかけるには、以下のようにする。
-median の設定値は適当に調節する。

1
$ convert test.jpg -median 10 test_median.jpg

test_median

ぼかし

画像にぼかしをかけるには、以下のようにする。
-blur の設定値は適当に調節する。

1
$ convert test.jpg -blur 5x5 test_blur.jpg

test_blur

モザイク

画像にモザイクをかけるには、以下のようにする。
2つの -sample を使用する。1つ目の -sample 値が元画像の 1/x 倍なら、2つ目の -sample 値は元画像の x 倍を指定する。

1
$ convert test.jpg -sample 20% -sample 500% test_sample.jpg

test_sample

エッジ検出

画像のエッジを検出するに、以下のようにする。
-edge の設定値は適当に調節する。

1
$ convert test.jpg -edge 10 test_edge.jpg

test_edge

エンボス

画像にエンボス効果をかけるには、以下のようにする。
-emboss の設定値は適当に調節する。

1
$ convert test.jpg -emboss 10 test_emboss.jpg

test_emboss

水墨画風

画像を水墨画風に変換するには、以下のようにする。
-charcoal の設定値は適当に調節する。

1
$ convert test.jpg -charcoal 5 test_charcoal.jpg

test_charcoal

ぬりえ風

画像をぬりえ風に変換するには、以下のようにする。

1
2
$ convert test.jpg -edge 1 -negate -normalize -colorspace Gray \
    -blur -0x.5 -contrast-stretch 0x50% test_colorspace_1.jpg

test_colorspace_1

以下のようなコマンドでもよい。

1
2
3
$ convert test.jpg -background white -flatten -colorspace Gray \
    -negate -edge 1 -negate -normalize -threshold 50% -despeckle \
    -blur 0x.5 -contrast-stretch 0x50% test_colorspace_2.jpg

test_colorspace_2

さらに、以下のようなコマンドだと、よりぬりえ風に近づいた。(画像の質による)

1
2
3
$ convert test.jpg -colorspace gray \
    \( +clone -blur 0x2 \) +swap -compose divide -composite \
    -linear-stretch 5%x0% test_colorspace_3.jpg

test_colorspace_3

スケッチ風

画像をスケッチ風に変換するには、以下のようにする。

1
$ convert test.jpg -colorspace gray -sketch 0x20+135 test_sketch_1.jpg

test_sketch_1

以下のように、あらかじめスケッチ風背景画像を作成しておき、次にその画像を元の画像に重ね合わせるような方法も可能。

1
2
3
4
5
6
$ convert -size 256x256 xc:  +noise Random  -virtual-pixel tile \
    -motion-blur 0x20+135 -charcoal 1 -resize 50% pencil_tile.gif
$ convert test.jpg -colorspace gray \
    \( +clone -tile pencil_tile.gif -draw "color 0,0 reset" \
    +clone +swap -compose color_dodge -composite \) \
    -fx 'u*.2+v*.8' test_sketch_2.jpg

pencil_tiletest_sketch_2

参考サイト


これらの他にも、様々な画像変換方法が考えられます。
他の方法は、必要になった際に考えることにします。

以上。

Comments