使用python检测图像中最常用的颜色

2024-09-29 21:25:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python在图片中找到最常用的颜色。例如,在下面的图像中检测对象的颜色

http://www.shopcrazy.com.ph/wp-content/images/2007/02/shiny-bags-01.jpg

如何从RGB代码中检测基色(如上图中的红色)。


Tags: 对象图像comhttp颜色www图片content
3条回答

我将使用Python图像库。这是一段计算图像中白色像素/非白色像素数的代码。

import sys

from PIL import Image

im = Image.open(sys.argv[1])
white = 0
black = 0
for i in im.getdata():
  if i == (255,255,255):
    white += 1
  else:
    # we assume black everything that is not white:
    black += 1
print im.size[0],im.size[1],white,black

在你的例子中,我会做一个字典来保持每个rgb三元组对一个计数器,所以我会像这样重新编写程序(未测试)

import sys

from PIL import Image

im = Image.open(sys.argv[1])
count= {}
for i in im.getdata():
  if not count.has_key(i):
      count[i] = 0

  count[i] += 1

现在可以检查计数最高的一个,得到使用最多的rgb三元组。当然,如果你想同时检查相邻颜色,你必须转换成HSV并检查不同HSV点之间的距离,然后决定哪个距离太大。在HSV空间中足够近的点(尤其是色调分量)很可能是相同的颜色,因此可以将它们相加。

暴力的方法是循环图像中的所有像素,并保持R,G,B值的计数。更精细的方法是使用Python Image Library直方图函数并计算所有颜色的平均值。

因为你很可能不需要使用24位颜色空间的所有一百万种颜色的直方图,所以我建议将图像转换成HSV空间。 然后,可以将该空间的色调部分划分为若干个容器,这些容器描述要查找的色调(“暗红色”、“橙红色”或其他)。然后对这些箱子做一个直方图,找出哪个是主色调,哪个是“颜色”。

维基百科的文章http://en.wikipedia.org/wiki/HSL_and_HSV应该会让你开始。如果使用图像处理库,则可能存在rgb to hsv/hsl函数。

另外,如果图像很大并且速度是个问题,您可以考虑在直方图编程之前将图像缩小到较小的大小。

相关问题 更多 >

    热门问题