OpenCV利用Python展示图片的灰度直方图

前言:在提高图像质量方面,对比度增强(对比度拉伸)是其中一种图像增强技术,它主要解决图像的灰度级范围较小造成的对比度较低的问题,目的就是将输出图像的灰度级放大到指定的程度,使得图像中的细节看起来更清晰。

灰度直方图:

灰度直方图是图像灰度级的函数,用来描述每个灰度级的图像矩阵中的像素个数或占有率。

灰度直方图的python实现:

首先需要定义一个calcGrayHist函数计算灰度直方图,其中对于8位图(256色位图,RGB结构),图像的灰度级范围是0~255之间的整数。

逻辑思路:

首先将图像信息读取出来,保存到变量中,将该图像变量带入calcGrayHist函数中,由calcGrayHist函数计算出该图像在0~255之间每一个灰度级对应的像素个数,并将数值返回,最后利用python的绘图工具包MatplotlibcalcGrayHist计算出的灰度直方图进行可视化展示。

代码如下:

# -*- coding:utf-8 -*-

import sys

import numpy as np

import cv2

import matplotlib.pyplot as plt

#计算灰度直方图

def calcGrayHist(image):

    #灰度图像矩阵的高和宽

    rows,cols = image.shape

    #存储灰度直方图

    grayHist = np.zeros([256],np.uint64)

    for r in xrange(rows):

        for c in xrange(cols):

            grayHist[image[r][c]] += 1

    return grayHist

 

#主函数

if __name__ == "__main__":

    if len(sys.argv) > 1:

        image = cv2.imread(sys.argv[1],cv2.CV_LOAD_IMAGE_GRAYSCALE)

    else:

        print "请使用图片"

    #计算灰度直方图

    grayHist = calcGrayHist(image)

    #画灰度直方图

    x_range = range(256)

    plt.plot(x_range,grayHist,'r',linewidth=2,c='black')

    #设置坐标轴的范围

    y_maxValue = np.max(grayHist)

    plt.axis([0,255,0,y_maxValue])

    #设置坐标轴的标签

    plt.xlabel('gray Level')

    plt.ylabel('number of pixels')

    #显示灰度直方图

plt.show()

 

结果如下:


aliyun
赵群博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论