使用 imagemagick 在图像上获取特定指示器

getting a specific indicator on an image with imagemagick

我想评价一张图片是否模糊。 实际使用 imagemagick 6.7.7-10 我已经看到 identify command 提供了一些可能有趣的信息,并且命令:

identify  -format "%[filename] sd:%[standard-deviation]\n" floue1.jpg

回答> floue1.jpg sd:7876.9

似乎是一个好的开始。 但是,如果我使用:

identify -verbose floue1.jpg | grep stan

  standard deviation: 34.8189 (0.136545)
  standard deviation: 26.7428 (0.104874)
  standard deviation: 29.8434 (0.117033)
  standard deviation: 30.6494 (0.120194)

我看到了 4 个标准偏差值,一个是全局值,一个是每个颜色通道,这些值与我使用第一个命令获得的单个值不同。

这些结果从哪里来 from/mean,我怎样才能 select(打印)这些结果?

它是这样工作的:

identify -verbose floue1.jpg | grep stan
  standard deviation: 39.0047 (0.15296)
  standard deviation: 36.45 (0.142941)
  standard deviation: 37.9805 (0.148943)
  standard deviation: 37.8263 (0.148339)

线上的第一个数字在 0-255 范围内缩放,第二个数字标准化为 0 到 1 的范围。

第一行是红色标准差,第二行是绿色标准差,第三行是蓝色标准差,最后一行是所有通道的平均值。

如果您想单独访问它们,请使用:

convert floue1.jpg -format "%[filename] sd:%[fx:standard_deviation.blue]\n" info:
floue1.jpg sd:0.148943

或者,您可以 select 另一个并缩放它:

convert floue1.jpg -format "%[filename] sd:%[fx:int(standard_deviation.green*255)]\n" info:
floue1.jpg sd:36

如果您想要一次全部使用并且您正在使用 bash,您可以这样做:

read sdr sdg sdb <<< $(convert floue1.jpg -format "%[fx:int(standard_deviation.red*255)] %[fx:int(standard_deviation.green*255)] %[fx:int(standard_deviation.blue*255)]" info: )

echo $sdr, $sdg, $sdb
39, 36, 37