分别显示原彩色图像flower1和给定的两幅彩色噪声图像的直方图,去除图像噪声,对去噪后的图像进行直方图均衡化,显示均衡化后的图像和直方图。写一下opecv代码
时间: 2024-05-15 20:14:21 浏览: 100
以下是针对flower1图像的代码,其他噪声图像同理:
```python
# 导入必要的库
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取原彩色图像
img = cv2.imread('flower1.jpg')
# 显示原彩色图像和其直方图
plt.subplot(221)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.subplot(222)
plt.hist(img.ravel(), 256, [0, 256])
plt.title('Original Histogram')
# 添加高斯噪声
mean = 0
var = 50
sigma = var ** 0.5
gaussian = np.random.normal(mean, sigma, img.shape)
noisy_img = img.astype(np.float64) + gaussian
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
# 显示带噪声的彩色图像和其直方图
plt.subplot(223)
plt.imshow(cv2.cvtColor(noisy_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy Image')
plt.subplot(224)
plt.hist(noisy_img.ravel(), 256, [0, 256])
plt.title('Noisy Histogram')
# 高斯滤波去噪
dst = cv2.GaussianBlur(noisy_img, (3, 3), 0)
# 显示去噪后的彩色图像和其直方图
plt.figure()
plt.subplot(221)
plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title('Denoised Image')
plt.subplot(222)
plt.hist(dst.ravel(), 256, [0, 256])
plt.title('Denoised Histogram')
# 直方图均衡化
hsv = cv2.cvtColor(dst, cv2.COLOR_BGR2HSV)
hsv[:, :, 2] = cv2.equalizeHist(hsv[:, :, 2])
eq_img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
# 显示均衡化后的彩色图像和其直方图
plt.subplot(223)
plt.imshow(cv2.cvtColor(eq_img, cv2.COLOR_BGR2RGB))
plt.title('Equalized Image')
plt.subplot(224)
plt.hist(eq_img.ravel(), 256, [0, 256])
plt.title('Equalized Histogram')
plt.show()
```
这段代码会生成一张包含四个子图的图像,分别为原彩色图像、带噪声的彩色图像、去噪后的彩色图像和均衡化后的彩色图像,每个子图的下面还会有对应的直方图。
阅读全文