对己知图像 sauirre1. jpg 进行直方图均衡化处理以改善图像效果,请根据直方图均衡化原理,自行编写代码,实现同时绘制原始图像,原始图像直方图,均衡化后的图像和均衡化后图像的直方图。 提示:* 1、 本实验需要用到计算机祝觉的库cx2,cv2 是第三方库,在使用 之前需要先进行安装,再导入方可使用,安装命令 pip install opency-pythony 2、cv2 库中读入图像的函数为 imread0,绘制图像的直方图函数为 histOr 3、读入的西数若为彩色图像,在进行直方图均衡化之前,需要先将其转换成灰度图像,转换西数为 evtcolar0,其用法为 cutColor(ing, cv2. COLOR_BGR2GRAY) 4、直方風均衡化函数 equalizeHist ()。
时间: 2024-02-21 09:57:45 浏览: 20
好的,我会根据你的要求回答这个问题。以下是对图像进行直方图均衡化处理的代码:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读入原始图像
img = cv2.imread('sauirre1.jpg')
# 将原始图像转换成灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对灰度图像进行直方图均衡化处理
equ = cv2.equalizeHist(gray)
# 绘制原始图像和直方图
plt.subplot(2, 2, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 2)
plt.hist(gray.ravel(), 256, [0, 256])
plt.title('Original Image Histogram')
plt.xlim([0, 256])
# 绘制均衡化后的图像和直方图
plt.subplot(2, 2, 3)
plt.imshow(equ, cmap='gray')
plt.title('Equalized Image')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 4)
plt.hist(equ.ravel(), 256, [0, 256])
plt.title('Equalized Image Histogram')
plt.xlim([0, 256])
plt.show()
```
运行上述代码后,你将得到一个包含原始图像、原始图像直方图、均衡化后的图像和均衡化后图像直方图的图像窗口。其中,第一行中左侧为原始图像,右侧为原始图像直方图;第二行中左侧为均衡化后的图像,右侧为均衡化后图像直方图。
直方图均衡化的原理是将图像中的像素值分布变得更加均匀,使得图像具有更好的视觉效果。具体来说,直方图均衡化可以通过对图像的累积直方图进行线性拉伸来实现。对于像素值范围在[0, L-1]之间的灰度图像,累积直方图可以表示为:
$$
h(k) = \sum_{i=0}^{k} p(i)
$$
其中,$p(i)$ 表示像素值为 $i$ 的像素在图像中的占比,$k$ 表示像素值。将每个像素的像素值替换为 $h(k)$,即可实现直方图均衡化。