OpenCV图像处理之直方图

本文介绍了图像直方图的概念,包括bin、dims和range等术语,以及直方图在图像亮度分布中的应用。直方图均衡化能提升图像对比度,而自适应直方图均衡化则通过对比度限制和双线性差值处理,有效减少噪声并增强图像细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直方图

直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中。其中, bin 为直方图中经常用到的一个概念,可以译为 “直条” 或 “组距”,其数值是从数据中计算出的特征统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。

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

假设有一张图像的信息(灰度值 0 - 255,已知数字的范围包含 256 个值,于是可以按一定规律将这个范围分割成子区域(也就是 bins)。如:

在这里插入图片描述然后再统计每一个 bin(i) 的像素数目。可以得到下图(其中 x 轴表示 bin,y 轴表示各个 bin 中的像素个数):

直方图的一些术语和细节:

dims:需要统计的特征数目。在上例中,dims = 1 ,因为仅仅统计了灰度值。统计RGB,就dims=3
bins:每个特征空间子区段的数目,可译为 “直条” 或 “组距”,在上例中, bins = 16。一般分256,每个像素进行统计
range:要统计特征的取值范围。在上例中,range = [0, 255]。
直方图的意义:

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

例如,全黑图片,1/3出有一条白线,和2/3处有一条白线,直方图相同

API:

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 numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
# 1 直接以灰度图的方式读入
img = cv.imread('./006.jpg',0)
# 2 统计灰度图
histr = cv.calcHist([img],[0],None,[256],[0,256])


# 5. 图像展示
fig,axes=plt.subplots(nrows=2,ncols=2,figsize=(10,8))
axes[0,0].imshow(img,cmap=plt.cm.gray)
axes[0,0].set_title
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值