numpy图像中灰度值的直方图

时间:2015-04-25 11:05:02

标签: python image-processing numpy matplotlib

我将图像加载到numpy数组中,并希望在直方图中绘制其颜色值。

import numpy as np

from skimage import io
from skimage import color

img = io.imread('img.jpg')
img = color.rgb2gray(img)

unq = np.unique(img)
unq = np.sort(unq)

当我们检查unq的值时,我们会看到类似

的内容
array([  5.65490196e-04,   8.33333333e-04,   1.13098039e-03, ...,
         7.07550980e-01,   7.09225490e-01,   7.10073725e-01])

对于matplotlib仍然有太多的值,所以我的想法是遍历unq并删除每个只偏离x的前任的值。

dels = []

for i in range(1, len(unq)):
    if abs(unq[i]-unq[i-1]) < 0.0003:
        dels.append(i)

unq = np.delete(unq, dels)

虽然这种方法有效但效率非常低,因为它没有使用numpy的优化实现。

是否有一个numpy功能可以为我做这个?

注意到我的算法会丢失有关颜色发生频率的信息。让我试着修复这个

1 个答案:

答案 0 :(得分:10)

如果您只想计算直方图,可以使用np.histogram

Object_%s = Object() %num
SyntaxError: can't assign to operator

在这里,bin_counts, bin_edges = np.histogram(img, bins, ...) 可以是箱数,也可以是指定上下边缘的矢量。

如果您想绘制直方图,最简单的方法是使用plt.hist

bins

请注意,在计算直方图之前,我使用bin_counts, bin_edges, patches = plt.hist(img.ravel(), bins, ...) 展平了图像数组。如果将2D数组传递给img.ravel(),它会将每一行视为一个单独的数据系列,这不是您想要的。