我可以使用imagemagick来检测边框颜色吗?

时间:2018-02-08 09:18:07

标签: imagemagick

我必须处理很多图像,并且我正在寻找一种检测边框颜色的方法。例如,拍下这张图片:

enter image description here

是否可以确定图像是否具有白色背景?解决方法可以是提取1px的边框并检查提取的边框的颜色是否为白色。但我不认为ImageMagick的shave - 功能支持这个,对吗?

1 个答案:

答案 0 :(得分:2)

有很多技巧......

  • 您可以获得左上角(或其他)角点像素值,或
  • 所有4个角并取中位数,或
  • 从每侧取1px宽的切片并选择方差最小的切片。

让我们制作一张测试图像200x100:

convert xc:red xc:lime +append \( xc:blue xc:white +append \) -append -scale 200x100\! image.png

enter image description here

以下是获取角点像素的一些方法:

# Top left pixel
magick image.png -format "%[hex:u.p{0,0}]\n" info:
FF0000

# Top right pixel
magick image.png -crop "1x1+%[fx:w-1]+0" -format "%[hex:u.p{0,0}]\n" info:
00FF00

# Bottom left pixel
magick image.png -crop "1x1+0+%[fx:h-1]+0" -format "%[hex:u.p{0,0}]\n" info:
0000FF

# Bottom right pixel
magick image.png -crop "1x1+%[fx:w-1]+%[fx:h-1]" -format "%[hex:u.p{0,0}]\n" info:
FFFFFF

现在让我们看看我们可以使用更好的样本图像的顶部,底部,左侧和右侧边缘:

convert -size 256x256 gradient:red-yellow image.png

enter image description here

# Top row mean and standard deviation
magick image.png +repage -crop x1\!+0+0 -format "%[fx:mean],%[fx:standard_deviation]\n" info:
0.333333,0

标准偏差为零,因此此行中的所有像素都相同。

# Bottom row mean and standard deviation
magick image.png +repage -crop "x1\!+0+%[fx:h-1]" -format "%[fx:mean],%[fx:standard_deviation]\n" info:
0.666667,0

标准偏差为零,因此此行中的所有像素都相同,但更亮(0.6666对0.3333),因为红色和绿色像素都亮起 - 变黄。

# Left edge mean and standard deviation
magick image.png +repage -crop "1\!x+0+0" -format "%[fx:mean],%[fx:standard_deviation]\n" info:
0.5,0.0967909

边缘有一些偏差,因为颜色正在变化。

# Right edge mean and standard deviation
magick image.png +repage -crop "1\!x+%[fx:w-1]+0" -format "%[fx:mean],%[fx:standard_deviation]\n" info:
0.5,0.0967909