python图像处理之直方图绘制

上一次我们介绍了通过python将图像进行灰度化,这一次我们来介绍如何通过python进行图像直方图的绘制,这一次我们要借助于python中的matplotlib库。

预备知识

何为直方图

图像直方图是对图像像素分布情况的图形表示,比如我们可以统计像素为0的点有多少个,像素为1的点有多少个…然后将统计情况用图形表示出来即为直方图,当然我们也可以根据需要统计区间内的分布情况,比如像素在0到100内的像素点的个数等等。

matplotlib

matplotlib库是python第三方库,可以完成绘制各种图形以及数据可视化的任务。在绘制直方图时,我们使用pyplot子模块中的hist函数。下面我们先简要介绍该函数的使用,这样在下面就可以直接使用了。
plt.hist(a,num_bins)

  • a:数据列表
  • num_bins:要分成的组数
    简而言之,对于图片而言,第一个参数就是所有像素点的取值情况,第二个参数就是我们打算把这些像素值分为几组,这个函数也可用于一般的直方图绘制,注意第一个参数应该为numpy数组类型。

开始绘制

一般而言我们都是对于灰度图进行直方图的绘制,因此我们先要进行灰度化操作,还需要注意的是不能直接将一张图片读取后直接作为hist函数的第一个参数,要先将其转化为一个一维的数组。
下面我们来看代码。
首先导入需要的库:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

随后读入图片并进行灰度化操作,这里方便起见我们直接调用opencv自带的函数。

path_1 = 'work2data/guazi.bmp'
img_1 = cv.imread(path_1)
img_1_gray = cv.cvtColor(img_1, cv.COLOR_RGB2GRAY)

接下来我们定义直方图绘制的函数


def histogram(img):
    img = img.reshape(-1)  #将图像展开成一个一维的numpy数组
    plt.hist(img, 128)  #将数据分为128组
    plt.show()

我们通过语句调用这个函数就可以完成直方图绘制,效果如下图所示。
图片的像素分布情况
图像直方图的绘制还可以通过numpy和opencv中的函数来完成,可以看这篇blog:OpenCV-Python教程15:直方图
本次分享就到这里,感谢阅读!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值