ImageMagickにて、画像中の指定座標位置の画素値を取得する方法を記述する。
画像処理を行った結果を定量的に解析するときなどに利用できる。
使用バージョン
- ImageMagick 6.9.1-4 Q16
コマンド例
convert sample-640x480.png -crop 1x1+320+0 -format "%[fx:r * 255]" info:
概念
入力画像について、指定位置から1x1ピクセルの領域を切り出し、その内容を数値として整形して出力する。
指定位置からの切り出し
-crop
オプションを使用する。
-crop 1x1+X+Y
と指定することで、座標(X, Y)
から1x1ピクセル領域を切り出す。
数値への整形
-format
オプションを使用する。
"%[fx:]"
を用いて画素値を取得する。fx:
の後ろに取り出したいカラーチャネルを指定する。
本例では、Redチャネルを指定している。
%[fx:]
で取り出すと、画素値が0.0から1.0の間に正規化されるため、必要に応じて255を乗ずるなどの演算を施す。
出力
-format
で整形した情報をinfo:
にて文字列として出力する。
その他
別の方法
%[fx:]
の代わりに%[pixel:]
を用いることも可能。このときは正規化されないため、%[fx:]
のときのような演算は不要。
この場合、出力には当該画素の情報も共に出力される。
実行例:
convert sample-640x480.png -crop 1x1+320+0 -format "%[pixel:r]" info:
gray(127)
複数の入力
入力画像のファイル名にはワイルドカードを指定できる。
複数のファイルにわたって同じ座標の画素値を取り出すということもできる。
-format
内で%f
を使うとファイル名を出力できるので、どのファイルの出力か対応づけられる。
>convert sample*.png -crop 1x1+0+0 -format "(%f) -> %[fx:r * 255]\n" info:
(sample00.png) -> 0
(sample01.png) -> 23
(sample02.png) -> 46
(sample03.png) -> 70
(sample04.png) -> 93
(sample05.png) -> 116
(sample06.png) -> 139
(sample07.png) -> 162
(sample08.png) -> 185
(sample09.png) -> 209