【发布时间】:2015-04-25 11:05:02
【问题描述】:
我将图像加载到 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 功能可以为我做到这一点?
刚刚注意到我的算法丢失了关于颜色出现频率的信息。让我尝试解决这个问题。
【问题讨论】:
-
为什么不使用
np.histogram(img, bins)(或plt.hist(img.ravel(), bins),如果你只想绘制它)? -
@ali_m 是的,这会回答我的问题。
标签: python image-processing numpy matplotlib