首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定一种颜色“图像中有多少单一颜色”

确定一种颜色“图像中有多少单一颜色”
EN

Stack Overflow用户
提问于 2011-10-26 20:21:57
回答 2查看 433关注 0票数 1

我试图计算整个图像中一种颜色的平均值,以确定颜色、饱和度或强度或其他描述视频帧之间变化的值。然而,我只想得到一个值,它将描述整个框架(并叹息,选择的颜色在它)。计算帧中颜色的简单平均值给出了视频帧之间的非常小的差异,在0..255空间上只有2-3。

除了直方图之外,有没有其他方法来确定图像的颜色,据我所知,直方图将给我一个以上的值来描述单个帧。

EN

回答 2

Stack Overflow用户

发布于 2011-10-27 11:12:45

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

  1. 使用RGB (或灰色)上的均值偏移滤镜对图像中的颜色进行聚类-几乎相似的颜色聚在一起。这减少了要处理的颜色数量。

  1. 更改为灰度级并计算频率直方图,其中包含图像

中存在的像素值的柱状图0...255

  1. 最高频率-中位数-将对应于存在最多的面元(颜色)。每个bin的频率会给你一个no。帧中存在的颜色的像素的百分比。

  1. 将中间值作为描述帧的单一颜色-帧中出现的颜色最多。

这里的关键点是上述步骤对于实时视频是否足够快。我想你得试着找出答案。

票数 1
EN

Stack Overflow用户

发布于 2011-10-26 20:42:29

最坏的情况是,你可以遍历图像中的所有像素并进行计数。不知道你使用的是什么编程,但是我使用Python和Numpy,类似这样的东西。其中pb是一个gtk像素,里面有我的图像。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7902483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档