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

我可以使用imagemagick检测边框颜色吗?,imagemagick,Imagemagick,我必须处理很多图像,我正在寻找一种检测边界颜色的方法。例如,以下图为例: 是否有可能确定图像具有白色背景?一种解决方法是提取1px的边框,并检查提取的边框颜色是否同样为白色。但是我不认为ImageMagick的剃须功能支持这一点,对吗?有很多技术 您可以获得左上角(或其他)像素值,或者 所有4个角,取中间带,或 从每一侧各取一片1倍宽的切片,然后选择方差最小的一片 让我们制作一个测试图像200x100: convert xc:red xc:lime +append \( xc:blue x

我必须处理很多图像,我正在寻找一种检测边界颜色的方法。例如,以下图为例:


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

有很多技术

  • 您可以获得左上角(或其他)像素值,或者
  • 所有4个角,取中间带,或
  • 从每一侧各取一片1倍宽的切片,然后选择方差最小的一片
让我们制作一个测试图像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

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

# 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 vs 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

顺便说一句,如果你想比较平均值或标准偏差,shell在处理浮动方面相当差,所以你可能更喜欢转换成整数百分比<代码>[fx:int(平均值*100)]
# 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