python opencv实现绘制图像的灰度直方图

Posted Evan.lu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python opencv实现绘制图像的灰度直方图相关的知识,希望对你有一定的参考价值。

思路:先把图片转换为灰度图,然后根据灰度值的分布来绘制直方图

使用方法:matplotlib库,hist函数,revel()函数

hist函数功能:根据数据源和像素级绘制直方图

使用方法:hist(数据源,像素级)

数据源:一维数组。由于灰度图像是由一个二维数组组成,所以需要使用revel()函数进行转换。

像素级:一般是256

ravel()使用方法:一维数组=多维数组.ravel()


具体实践:将彩色图转换为灰度图,并绘制灰度图的直方图,显示灰度图和直方图

#!/usr/bin/env python
# coding=utf-8
import cv2
import matplotlib.pyplot as plt
#读图
img = cv2.imread(r'C:\\Users\\thorne\\PycharmProjects\\biyesheji\\image\\13.jpeg')
#转换成灰度图
img2 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#显示灰度图
cv2.imshow('gray_img',img2)
cv2.waitKey(0)
#获取直方图,由于灰度图img2是二维数组,需转换成一维数组
plt.hist(img2.ravel(),256)
#显示直方图
plt.show()
cv2.waitKey(0)

运行结果:

 

补充知识:图像直方图是表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素个数。 这种直方图中,横坐标的左侧为较暗的区域,而右侧为较亮的区域。因此一张较暗图片的直方图中的数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。


法二:自己写函数计算灰度直方图

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


def calcGrayHist(I):
    # 计算灰度直方图
    h, w = I.shape[:2]
    grayHist = np.zeros([256], np.uint64)
    for i in range(h):
        for j in range(w):
            grayHist[I[i][j]] += 1
    return grayHist

img = cv.imread(r'C:\\Users\\thorne\\PycharmProjects\\biyesheji\\image\\13.jpeg')
grayHist = calcGrayHist(img)
x = np.arange(256)
# 绘制灰度直方图
plt.plot(x, grayHist, linewidth=2)
plt.xlabel("gray Label")
plt.ylabel("number of pixels")
plt.show()
cv.waitKey()

 

以上是关于python opencv实现绘制图像的灰度直方图的主要内容,如果未能解决你的问题,请参考以下文章

Python从零到壹丨带你了解图像直方图理论知识和绘制实现

python+opencv 灰度直方图及其二值化

OpenCV图像增强(python)

opencv入门9:直方图-histogram

对OpenCV的函数calcHist()进行透彻解析,并利用它实例绘制一个一维灰度直方图

opencv——图像直方图与反向投影