Python +OpenCV CH14:直方图

本文详细介绍了Python结合OpenCV进行图像处理中的直方图概念,包括直方图的基础理论、matplotlib与OpenCV绘制直方图的方法、使用掩膜的直方图、直方图均衡化的原理和实现,以及直方图均衡化在图像增强中的应用。通过实例代码展示了如何使用cv2.calcHist()和cv2.equalizeHist()函数进行直方图计算和均衡化处理。
摘要由CSDN通过智能技术生成

1 直方图概念

1.1 基础理论

  • 横坐标: 图像中各个像素点的灰度级
  • 纵坐标: 具有该灰度级的像素个数
1.1.1 直方图

在这里插入图片描述

1.1.2 归一化直方图
  • 横坐标: 图像中各个像素点的灰度级
  • 纵坐标: 出现该灰度级的概率
    在这里插入图片描述

1.2 plt.hist()函数介绍

  • DIMS:使用参数的数量
  • BINS:参数子集的数目
  • RANGE: 灰度值范围,一般为[0,255] (8位位图)
    在这里插入图片描述

1.3 绘制直方图

1.3.1 matplotlib
  • 提供了类似matlab的绘图框架
    ・调用方法 import matplotlib.pyplot as plt

  • 函数histhist(数据源,像素级)
    ・数据源: 图像, 必须是一维数组
    ・像素级: 一般是256,指[0,255]

  • 函数ravel() 二维到一维的转换
    ・将多维数组降为一维数组
    在这里插入图片描述

1.3.2 hist()代码实现
  • 代码
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("image\\boat.jpg")
plt.hist(img.ravel(),256)
  • 效果
    在这里插入图片描述

2 OpenCV来统计直方图

2.1 cv2.calcHist()函数

在这里插入图片描述
hist = cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)

其中,参数:
・hist – 直方图;
・images – 原始图像;
  →通道编号需要[]括起来
・channels – 指定通道;
  →通道编号需要[]括起来
  →输入图像是灰度图时,[0]
  →彩色图像[0],[1],[2]分别对应[B],[G],[R]
・mask – 掩码图像;
  →统计整幅图像时为 None
  →统计某一区域时,需掩码图像
・histSize – BINS的数量;
  → [256]
・ranges – 像素值范围;
  →[0,255]
・accumulate– 累计标识;
  →默认为 false
  →如果设置为True,则直方图在分配时不会被清零  
  →允许从多个对象中计算单个直方图,或者用于实时更新
  →

2.2 代码实现

  • 代码
import cv2
import numpy as np
img = cv2.imread("image\\lena.bmp")
hist = cv2.calcHist([img],[0],None,[256],[0,255])
print(type(hist))
print(hist.size)
print(hist.shape)
  • 效果
<class 'numpy.ndarray'> #数组类型
256 #256个元素
(256,1) #256行,1列

3 OpenCV绘制直方图

3.1 plt.plot()函数

  • 示例1代码
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 5, 0.1)
y = np.sin(x)
plt.plot(x,y)
  • 示例1结果
    在这里插入图片描述
  • 示例2代码
import numpy as np
import matplotlib.pyplot as plt
x = [0,1,2,3,4,5,6]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值