使用python给彩色照片在hsv形式上加噪声,用matplotlib展示hsv三个通道后,转变为RGB展示
时间: 2024-05-04 19:16:33 浏览: 13
好的,我可以为您解答这个问题。首先,我们可以使用Python中的NumPy和OpenCV库来对彩色照片进行处理。下面是代码实现:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取彩色照片
img = cv2.imread('test.jpg')
# 转换为HSV格式
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 添加噪声
h, s, v = cv2.split(hsv)
h_noise = cv2.randn(h, 0, 5)
s_noise = cv2.randn(s, 0, 5)
v_noise = cv2.randn(v, 0, 5)
h = cv2.add(h, h_noise)
s = cv2.add(s, s_noise)
v = cv2.add(v, v_noise)
# 合并三个通道
hsv_noise = cv2.merge([h, s, v])
# 转换回RGB
rgb_noise = cv2.cvtColor(hsv_noise, cv2.COLOR_HSV2RGB)
# 展示原图和添加噪声后的图像
plt.subplot(221), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original')
plt.subplot(222), plt.imshow(h, cmap='gray'), plt.title('H channel')
plt.subplot(223), plt.imshow(s, cmap='gray'), plt.title('S channel')
plt.subplot(224), plt.imshow(v, cmap='gray'), plt.title('V channel')
plt.show()
plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original')
plt.subplot(122), plt.imshow(rgb_noise), plt.title('With noise')
plt.show()
```
在这段代码中,`cv2.imread()`函数用于读取图片,`cv2.cvtColor()`函数用于将BGR格式的图片转换为HSV格式。接着,我们使用`cv2.split()`函数将三个通道分离出来,并使用`cv2.randn()`函数向每个通道添加高斯噪声。然后,我们使用`cv2.merge()`函数将三个通道合并起来,并使用`cv2.cvtColor()`函数将其转换回RGB格式。最后,我们使用Matplotlib库展示了HSV三个通道的图像,以及添加噪声后的RGB图像。
希望能够帮到您,也希望您满意我的回答。