opencv里面直方图的意义

Posted 我是攻城师

tags:

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

什么是直方图

直方图是一种图表类型,在计算机视觉领域通常用来指反映图片的亮度,色彩,强度在整个图片里面的分布情况。直方图我们可以理解成另一种理解图片的方式。

直方图可以是彩色的图片,也可以是灰度图,直方图的X轴的范围是(0-255),Y轴则是不同像素值上,像素的数量,如果是彩色的图片Y轴则会有R,G,B三种像素展示,如果是灰度值则只有一种像素展示。

一些术语

BINS: 默认情况直方图是显示0-255范围内每个像素值的像素的数量,当然我们也可以设置一个个区间来统计这个区间内的像素值的数量,比如(0-15),(16-31),(240-255)例子连接 这里面的16个单独的区间都可以叫做一个BIN(英文箱子的意思)

DIMS: 维度,它代表收集颜色通道的个数,如果是灰度图这个值就是1,如果一个彩色图那么DIMS就是3

RANGE: 代表你想测量亮度的范围,正常下是[0-255]代表所有的像素值

使用方法

直方图可以通过opencv的内置的函数来展示,也可以通过numpy的函数来展示,这里推荐使用numpy来打印直方图,opencv内置的方法代码比较长,所以大多数时候都建议使用numpy的函数来展示,代码如下:

 
   
   
 
  1. # -*- coding:utf-8 -*-

  2. import matplotlib.pyplot as plt

  3. import numpy as np

  4. import cv2 as cv

  5. """

  6. 打印一个灰度图片的直方图

  7. """

  8. img = cv.imread('E:\\tmp\\cat.jpg')

  9. cv.imshow("orgin",img)

  10. def gray_histogram():

  11.    """

  12.    灰度图

  13.    :return:

  14.    """

  15.    # ravel方法代表返回一个连续扁平化的数组

  16.    # hist参数:数组,bin数量,像素值范围

  17.    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)

  18.    plt.hist(gray.ravel(), 256, [0, 256])

  19. def color_histogram():

  20.    """

  21.    彩色图

  22.    :return:

  23.    """

  24.    # 蓝 绿 红

  25.    color = ('b', 'g', 'r')

  26.    for i, col in enumerate(color):

  27.        histr = cv.calcHist([img], [i], None, [256], [0, 256])

  28.        plt.plot(histr, color=col)

  29.        plt.xlim([0, 256])

  30. gray_histogram()

  31. # color_histogram()

  32. plt.show()

  33. cv.waitKey(0)

`

(1)原图

(2)灰度直方图

(3)彩色直方图

直方图的意义

在计算机视觉领域,常常要处理各种各样的图片,通过观察图片的直方图,可以使我们在加工图片时更加合理的调整一些函数的参数,比如边缘检测,高斯模糊,切割,透视,二值化等等。

参考文档:

https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.ravel.html

https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.histogram.html

https://docs.opencv.org/3.1.0/d1/db7/tutorial_py_histogram_begins.html


以上是关于opencv里面直方图的意义的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV自适应直方图均衡CLAHE的裁剪处理过程

灰度图像直方图变换的一些代码

灰度图像直方图变换的一些代码

OpenCV学习笔记13-图像直方图的介绍及代码实现

OpenCV自适应直方图均衡CLAHE C++源代码分享

Opencv——直方图掩膜直方图均衡化详细介绍及代码实现