09 --OpenCV学习—直方图

直方图

1.灰度直方图

直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的bin当中。其中,bin为直方图中经常用到的一个概念,可以译为“直条”或“组距”,其数值是从数据中计算出的特征统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。
图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素个数。这种直方图中,横坐标的左侧为较暗的区域,而右侧为较亮的区域。因此一张较暗图片的直方图中的数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。
注意:直方图是根据灰度图进行绘制的,而不是彩色图像。假设有一张图像的信息(灰度值0-255,已知数字的范围包含256个值,于是可以按一定规律将这个范围分割成子区域(也就是bins)。然后再统计每一个bin()的像素数目。

直方图的一些术语和细节:
  • dims:需要统计的特征数目。在上例中,dims=1,因为仅仅统计了灰度值。
  • bins:每个特征空间子区段的数目,可译为“直条”或“组距”,
  • range:要统计特征的取值范围。
直方图的意义:
  • 直方图是图像中像素强度分布的图形表达方式。
  • 它统计了每一个强度值所具有的像素个数。
  • 不同的图像的直方图可能是相同的。
2.直方图的计算和绘制

我们使用OpenCV中的方法统计直方图,并使用matplotlib:将其绘制出来。
API:

cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])
参数:
  • images::原图像。当传入函数时应该用中括号0括起来,例如:mgl
  • channels:如果输入图像是灰度图,它的值就是[O;如果是彩色图像的话,传入的参数可以是[0],[1],[2]它们分别对应着通道B,G,R。
  • mask:掩模图像。要统计整幅图像的直方图就把它设为None。但是如果你想统计图像某一部分的直方图的话,你就需要制作一个掩模图像,并使用它。
  • histSize:BlN的数目。也应该用中括号括起来,例如:[256]。
  • ranges:像素值范围,通常为[0,256]
示例:
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1直接以灰度图的方式读入
img = cv.imread('./images/a2.jpg',0)
# 2统计灰度图
his = cv.calcHist([img], [0], None, [256], [0, 256])
# 3绘制灰度图
plt.figure(figsize=(10, 6), dpi=100)
plt.plot(his)
plt.grid()
plt.show()

原图:
在这里插入图片描述
直方图:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

衍生星球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值