确定“图像中单个颜色的多少”的颜色

时间:2011-10-26 12:21:57

标签: image image-processing colors

我正在尝试计算整个图像中一种颜色的平均值,以便确定颜色,饱和度或强度或eny其他值如何在视频的frmaes之间发生变化。 但是我想得到一个值来描述整个帧(和sigle,其中选择的颜色)。计算帧中颜色的简单平均值给出了视频帧之间的非常小的差异,在0..255空间上只有2-3。

除了直方图之外,还有其他方法可以确定图像的颜色吗?据我所知,它会给我一个以上描述单帧的值。

2 个答案:

答案 0 :(得分:1)

您使用哪个库进行图像处理?如果它是OpenCV(或Matlab),那么这里的步骤将非常简单。否则你需要四处寻找并尝试一下。

  1. 在RGB(或灰色,无论哪个)上使用均值平移滤镜来聚类图像中的颜色 - 几乎相似的颜色聚集在一起。这减少了要处理的颜色数量。
  2. 更改为灰度级并使用图像中存在的像素值的区间[0 ... 255]计算频率直方图
  3. 最高频率 - 中位数 - 将对应于最多出现的bin(颜色)。每个垃圾箱的频率会给你一个号码。框架中出现的颜色的像素数。
  4. 将中值作为单一颜色来描述您的帧 - 帧中最大量的颜色。

    这里的关键点是上述步骤对于实时视频来说是否足够快。你必须试着找出我的猜测。

答案 1 :(得分:0)

最糟糕的情况是,您可以遍历图像中的所有像素并进行计数。不确定你使用的是编程方式,但是我使用Python和Numpy类似的东西。其中pb是一个带有我图像的gtk pixbuf。

def pull_color_out(self, pb, *args):
    counter = 0
    dat = pb.get_pixels_array().copy()
    for y in range(0,pb.get_width()):
        for x in range(0,pb.get_height()):
            p = dat[x][y]
            #counts pure red pixels
            if p[1] = 255 and p[2] = 0 and p[3] = 0:
               counter += 1

    return counter

除此之外,我通常会使用直方图并从中获取所需的数据。主要是,这不是你最快的选择,特别是对于一个视频,但是如果你有时间或只是几​​帧,那么就会破解:P