python绘制灰度图片直方图-python – numpy图像中灰度值的直方图

我将图像加载到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值