编写一个能计算一张图像直方图的程序。 (b)编写直方图均衡的程序,输出均衡前后的直方图。 (c)请用实验结果分析,为什么结果图被增强?
时间: 2024-02-06 09:10:46 浏览: 65
(a) 计算图像直方图的程序可以使用Python中的NumPy和Matplotlib库。具体代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
import cv2
# 读取图像
img = cv2.imread('image.jpg', 0)
# 计算直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 绘制直方图
plt.hist(img.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.show()
```
(b) 直方图均衡化程序可以使用OpenCV库中的equalizeHist()函数。具体代码如下:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
img = cv2.imread('image.jpg', 0)
# 直方图均衡
equ = cv2.equalizeHist(img)
# 绘制均衡前后直方图
plt.subplot(121), plt.hist(img.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.subplot(122), plt.hist(equ.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.show()
# 显示均衡前后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Equalized Image', equ)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
(c) 直方图均衡化可以增强图像的对比度和亮度,使得图像更加清晰明亮。均衡化的过程就是将图像中像素灰度值的分布进行均匀化,使得图像中每个灰度值的像素数量相等,从而达到增强对比度和亮度的效果。
阅读全文