返回

opencv 直方图处理(python)

后端

从图像内部灰度级统计的直方图这一角度,对图像进行。 从直方图的角度出发,对图像进行分析和处理,可以达到增强图像显示效果的目标。

直方图实际上是反映图像灰度值的统计特性与图像灰度值之间的一个函数,直方图的统计图表明了图像中各个灰度值出现的频率。 以下是一种简单易懂的直方图的概念图:

直方图通常被用来观察图像的明暗对比度以及亮度分布情况, 还可以用于图像增强、图像匹配和图像分割等。 比如,对于灰度图像,图像的直方图是一个一维数组,该数组的每个元素表示图像中某个灰度值出现的频率。对于彩色图像,图像的直方图是一个三维数组,该数组的每个元素表示图像中某个颜色值出现的频率。

而直方图均衡化,可以把原来分布不均的灰度分布改成均衡的,这样整个图像明暗对比会变得更明显。

opencv库中的直方图处理模块

opencv库中的直方图处理模块提供了多种函数,可以用于对图像进行直方图均衡化和直方图的反向映射。
使用opencv函数进行直方图处理的步骤如下:

  1. 首先需要对图像进行灰度化处理,以获得图像的灰度图像。
  2. 然后,使用cv2.calcHist()函数计算图像的直方图。
  3. 接下来,使用cv2.equalizeHist()函数对图像的直方图进行均衡化。
  4. 最后,使用cv2.applyColorMap()函数将均衡化后的直方图应用到图像上,以获得增强后的图像。

opencv函数进行直方图处理的示例代码

import cv2

# 读取图像
image = cv2.imread('image.jpg')

# 对图像进行灰度化处理
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 计算图像的直方图
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])

# 对图像的直方图进行均衡化
equ = cv2.equalizeHist(gray)

# 将均衡化后的直方图应用到图像上
result = cv2.applyColorMap(equ, cv2.COLORMAP_JET)

# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Histogram Equalized Image', result)

# 等待用户输入
cv2.waitKey(0)
cv2.destroyAllWindows()

直方图的反向映射

直方图的反向映射是指将图像的直方图还原为原始图像的直方图。opencv库中的cv2.LUT()函数可以用于实现直方图的反向映射。

使用opencv函数进行直方图反向映射的步骤如下:

  1. 首先需要对图像进行灰度化处理,以获得图像的灰度图像。
  2. 然后,使用cv2.calcHist()函数计算图像的直方图。
  3. 接下来,使用cv2.LUT()函数将图像的直方图反向映射到原始图像的直方图。
  4. 最后,使用cv2.applyColorMap()函数将反向映射后的直方图应用到图像上,以获得原始图像。

opencv函数进行直方图反向映射的示例代码

import cv2

# 读取图像
image = cv2.imread('image.jpg')

# 对图像进行灰度化处理
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 计算图像的直方图
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])

# 对图像的直方图进行反向映射
lut = cv2.LUT(gray, hist)

# 将反向映射后的直方图应用到图像上
result = cv2.applyColorMap(lut, cv2.COLORMAP_JET)

# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Histogram Reversed Image', result)

# 等待用户输入
cv2.waitKey(0)
cv2.destroyAllWindows()