直方图

1.0 基本概念

    什么是直方图呢?通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值(0 到 255),y 轴是图片中具有同一个灰度值的点的数目。

    直方图其实就是对图像的另一种解释。一下图为例,通过直方图我们可以对图像的对比度,亮度,灰度分布等有一个直观的认识。几乎所有的图像处理软件都提供了直方图分析功能。

    让我们来一起看看这幅图片和它的直方图吧。(要记住,直方图是根据灰图像绘制的,而不是彩色图像)。直方图的左边区域像是了暗一点的像素数量,右侧显示了亮一点的像素的数量。从这幅图上你可以看到灰暗的区域比两的区域要大,而处于中间部分的像素点很少。

    现在我们知道什么是直方图了,那怎样获得一副图像的直方图呢?OpenCV 和 Numpy 都有内置函数做这件事。在使用这些函数之前我们有必要想了解一下直方图相关的术语。

    BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为 0到 255,你就需要 256 个数来显示上面的直方图。但是,如果你不需要知道每一个像素值的像素点数目的,而只希望知道两个像素值之间的像素点数目怎么办呢?举例来说,我们想知道像素值在 0 到 15 之间的像素点的数目,接着是 16 到 31,....,240 到 255。我们只需要 16 个值来绘制直方图。OpenCV
Tutorials on histograms中例子所演示的内容。那到底怎么做呢?你只需要把原来的 256 个值等分成 16 小组,取每组的总和。而这里的每一个小组就被成为 BIN。

    DIMS:表示我们收集数据的参数数目。在本例中,我们对收集到的数据只考虑一件事:灰度值。所以这里就是 1。

    RANGE:就是要统计的灰度值范围,一般来说为 [0,256],也就是说所有的灰度值

 

1.1 matlab绘制直方图

【matlab绘制直方图】
1.hist()函数
功能:根据数据源和像素级绘制直方图
语法:plt.hist(o.ravel(),256):根据数据源和像素级绘制直方图
    |-数据源:必须是一维数组,一般灰度图像都是二维数组,o.ravel()将其转换为一维数组
    |-像素级:一般256
2.ravel()函数
功能:将原始图像(二维数组)o转换为一维数组
语法:一维数组=多维数组.ravel()
    [[1,2,3],
     [4,5,6],
     [7,8,9]]        转成一维数组       [1,2,3,4,5,6,7,8,9]
import cv2
import matplotlib.pyplot as plt
o=cv2.imread("image\\boat.jpg",0)
print(o.shape)
cv2.imshow("original",o)
print(o)
plt.hist(o.ravel(),256)
print(o.ravel())
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()

输出:

(1024, 1024)
[[127 125 124 ... 171 170 163]
 [127 126 125 ... 168 168 166]
 [128 127 126 ... 163 165 170]
 ...
 [113 113 114 ...  96  98 104]
 [113 114 115 ...  95  96 100]
 [113 114 116 ...  94  94  98]]
[127 125 124 ...  94  94  98]

【扩充】plot的使用

【plot使用】
plt.plot(x, y)
    |-x:指定x的取值
    |-y:指定y的取值
np.arange(0, 5, 0.1)
    |-0:起点
    |-5:终点
    |-0.1:步长
import numpy as n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值