ImageMagick - 查找图像中三角形的平均颜色

时间:2016-01-21 21:02:53

标签: colors imagemagick average graphicsmagick

这是this question的更高级版本。从this image开始,如何使用ImageMagick / GraphicsMagick /一个不同的命令行工具从坐标中得到三角形下像素的平均颜色值?优选地,该解决方案也适用于其他多边形。

3 个答案:

答案 0 :(得分:1)

我会使用你的坐标使用-draw创建感兴趣区域的蒙版。然后可以将其用于将形状外的区域转换为透明。然后像以前一样将图像缩小为1x1像素。

答案 1 :(得分:1)

在@ Bonzo的答案的骨头上添加一些肉,这是你可以做到的一种方式。

convert image.jpg                              \
   \( +clone -evaluate set 0 -fill white       \
      -draw "polygon 400,50 450,150 200,220"   \ 
      -write mask.png -transparent black       \
   \) -compose copyopacity -composite          \
   -write masked.png -resize 1x1!              \
   -alpha off -depth 8 -format "%[pixel:p{0,0}]\n" info:

srgb(145,114,94)

所以,那说...... “加载原始图像,并在侧面的括号中执行以下操作,远离主图像。复制图像(-clone)并制作它全黑(-evaluate set 0),并为我们即将绘制的多边形填充白色(-fill white)。绘制多边形(-draw "polygon ...")并将其保存在名为{的文件中{1}}。现在让图像的所有黑色区域都透明。好,我们有一个蒙版。现在通过关闭括号返回到原始图像。从我们的蒙版图像复制透明度并将其应用到我们的原始图像({ {1}})。将屏蔽图像写为mask.png。调整大小为1x1像素以对其进行平均。现在关闭透明度并使单个像素保持稳定,并在终端上以人类可读的术语写出它是什么。“

您可以看到中间图像 - 这里是-compose copyopacity -composite

enter image description here

这里是masked.png

enter image description here

是的,我知道它并不完全匹配,但那只是因为你没有提供坐标,我不得不猜测它们!将您自己的数字放入mask.png部分,它将完全正常工作。

您实际上并不需要任何一个中间图像,我只保存它们以进行调试和演示,因此您可以从上面的命令中删除masked.png-draw polygon

<强>验证

只是为了检查舍入和平均的准确性,您可以用数学方法计算平均颜色。您使用与上面相同的基本技术,但通过计算蒙版中白色像素的比例然后屏蔽图像并查看蒙版中R,G和B的均值来计算均值的比例因子图像并按比例缩放...

-write mask.png

顺便说一句,这个平均值就是这样:

-write masked.png

enter image description here

答案 2 :(得分:0)

我最终通过使用scikit-image和numpy python模块解决了我的问题。示例代码如下:

from skimage import io, draw
import numpy

# read in the image as a numpy array
image = io.imread("image.png")
# setup a list of coords in the polygon
polygon = numpy.array([[100, 100], [200, 100], [200, 200], [100, 200]])
# Get a 2D list of pixels in the polygon
pixels = image[draw.polygon(polygon[:, 1], polygon[:, 0])]
# Use the channels of each pixel to get averages and convert them to ints
channels = numpy.average(pixels, 0).astype(int)
# Print!
print(channels)
相关问题