OpenCV 直方图的计算和绘制

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

直方图的意义:

  • 直方图是图像中像素强度分布的图形表达方式。
  • 它统计了每一个强度值所具有的像素个数。
  • 不同的图像的直方图可能是相同的

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

cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])
  • images: 原图像。当传入函数时应该用中括号 [] 括起来,例如:[img]。

  • channels: 如果输入图像是灰度图,它的值就是 [0];如果是彩色图像的话,传入的参数可以是 [0],[1],[2] 它们分别对应着通道 B,G,R。

  • mask: 掩模图像。要统计整幅图像的直方图就把它设为 None。但是如果你想统计图像某一部分的直方图的话,你就需要制作一个掩模图像,并使用它。

  • histSize:BIN 的数目。也应该用中括号括起来,例如:[256]。

  • ranges: 像素值范围,通常为 [0,256]

import cv2 as cv
from matplotlib import pyplot as plt

# 1 直接以灰度图的方式读入
img = cv.imread('./1.png', 0)

# # 2 统计灰度图
histr = cv.calcHist([img], [0], None, [256], [0, 256])

# 3 绘制灰度图
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 5), dpi=100)
axes[0].imshow(img, cmap=plt.cm.gray)
axes[0].set_title("原图")
axes[1].plot(histr)
axes[1].grid()
axes[1].set_title("灰度直方图")
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值