2011-10-26 94 views
1

我试图计算整个图像上的一种颜色的平均值,以确定颜色,饱和度或暗淡度或其他描述此颜色的值的方式视频的frmaes之间的变化。 但是,我想只得到一个值来描述整个框架(以及单色,在其中选择的颜色)。计算帧中颜色的简单平均值使得视频帧之间的差异非常小,在0..255的空间上只有2-3个。确定一种颜色“图像中单个颜色的多少”

是否有任何其他方法来确定直方图以外的图像的颜色,据我所知,会给我多个值描述单帧。

+0

您是否试图从每个帧中提取单一颜色,然后使用该颜色区分帧? – misha

回答

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

1

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

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

    这里的关键是如果上述步骤对于实时视频足够快。你必须尝试找出我的猜测。