我将图像加载到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:
bin_counts, bin_edges = np.histogram(img, bins, ...)
这里,箱可以是箱的数量,也可以是指定上下箱边的矢量.
如果要绘制直方图,最简单的方法是使用plt.hist:
bin_counts, bin_edges, patches = plt.hist(img.ravel(), bins, ...)
请注意,我在计算直方图之前使用了img.ravel()来展平图像数组.如果将2D数组传递给plt.hist(),它会将每一行视为一个单独的数据系列,这不是您想要的.
标签:python,numpy,matplotlib,image-processing
来源: https://codeday.me/bug/20190722/1504989.html