我必须处理很多图像,并且我正在寻找一种检测边框颜色的方法。例如,拍下这张图片:
是否可以确定图像是否具有白色背景?解决方法可以是提取1px的边框并检查提取的边框的颜色是否为白色。但我不认为ImageMagick的shave
- 功能支持这个,对吗?
答案 0 :(得分:2)
有很多技巧......
让我们制作一张测试图像200x100:
convert xc:red xc:lime +append \( xc:blue xc:white +append \) -append -scale 200x100\! image.png
以下是获取角点像素的一些方法:
# 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
# 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