我将一张图片加载到了一个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