5

我正在使用 Python 和 PIL。

我有 RGB 图像,我想知道那些只包含一种颜色(例如 #FF0000)或一些非常接近的颜色(#FF0000 和 #FF0001)的图像。

我正在考虑使用直方图,但很难用 3 个色带找出一些东西,所以我正在寻找一种更聪明的算法。

有任何想法吗?

ImageStat 模块就是答案!谢谢亚伦。我使用 ImageStat.var 来获取方差,并且效果很好。

这是我的一段代码:

from PIL import Image, ImageStat

MONOCHROMATIC_MAX_VARIANCE = 0.005

def is_monochromatic_image(src):
    v = ImageStat.Stat(Image.open(src)).var
    return reduce(lambda x, y: x and y < MONOCHROMATIC_MAX_VARIANCE, v, True)
4

3 回答 3

6

试试ImageStat 模块。如果返回的值extrema相同,则图像中只有一种颜色。

于 2009-03-24T14:03:28.870 回答
0

首先,您应该定义两种颜色之间的距离。然后您只需验证每个像素与您的颜色的距离是否足够小。

于 2009-03-24T13:41:58.813 回答
0

这是您可以使用的一个小片段:


import Image

im = Image.open("path_to_image")
width,height = im.size

for w in range(0,width):
  for h in range(0,height):
     # this will hold the value of all the channels
     color_tuple = im.getpixel((w,h))
     # do something with the colors here

也许使用散列并将元组存储为键并将其出现次数作为值?

于 2009-03-24T14:09:00.043 回答