用python编写一段程序,读入png图像,用plt.imshow显示其直方图。并对其进行直方图均衡,显示其处理结果和结果的直方图。 (2)读入jpg彩色图像进行直方图规定化,分别对RGB 三通道进行直方图规定化。
时间: 2023-05-17 11:07:17 浏览: 154
好的,我可以回答这个问题。以下是用Python编写的程序,可以读入png图像并显示其直方图,然后进行直方图均衡,显示其处理结果和结果的直方图:
```python
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
# 读入png图像
img = Image.open('test.png')
# 显示原始图像和直方图
plt.subplot(2, 2, 1)
plt.imshow(img)
plt.title('Original Image')
plt.subplot(2, 2, 2)
plt.hist(np.array(img).ravel(), bins=256, range=[0, 256])
plt.title('Original Histogram')
# 进行直方图均衡
img_eq = Image.fromarray(np.uint8(np.array(img) * 255))
img_eq = img_eq.convert('L')
img_eq = Image.fromarray(np.uint8(np.array(img_eq) / np.max(np.array(img_eq)) * 255))
img_eq = img_eq.convert('RGB')
# 显示均衡后的图像和直方图
plt.subplot(2, 2, 3)
plt.imshow(img_eq)
plt.title('Equalized Image')
plt.subplot(2, 2, 4)
plt.hist(np.array(img_eq).ravel(), bins=256, range=[0, 256])
plt.title('Equalized Histogram')
plt.show()
```
以下是用Python编写的程序,可以读入jpg彩色图像并进行直方图规定化,分别对RGB三通道进行直方图规定化:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读入jpg彩色图像
img = cv2.imread('test.jpg')
# 分离RGB三通道
b, g, r = cv2.split(img)
# 进行直方图规定化
b_eq = cv2.equalizeHist(b)
g_eq = cv2.equalizeHist(g)
r_eq = cv2.equalizeHist(r)
# 合并RGB三通道
img_eq = cv2.merge((b_eq, g_eq, r_eq))
# 显示原始图像和直方图
plt.subplot(2, 2, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.subplot(2, 2, 2)
plt.hist(img.ravel(), 256, [0, 256])
plt.title('Original Histogram')
# 显示规定化后的图像和直方图
plt.subplot(2, 2, 3)
plt.imshow(cv2.cvtColor(img_eq, cv2.COLOR_BGR2RGB))
plt.title('Equalized Image')
plt.subplot(2, 2, 4)
plt.hist(img_eq.ravel(), 256, [0, 256])
plt.title('Equalized Histogram')
plt.show()
```
阅读全文