将彩色图像分为黑白两个部分,定义了两个变量k1和k2,分别赋值为rate和0.5。然后使用rand(width, height)函数随机生成矩阵,由于rand函数生成的元素都在0-1之间,所以再比较该矩阵中的每个元素是否小于k1或k2,如果小于则将该元素赋值为1,反之则赋值为0,最终得到两个二值化的矩阵a1和a2。在矩阵中分为R、G、B三个通道为图像添加噪声,最后再将三个通道合在一起,如
时间: 2023-11-22 22:52:44 浏览: 53
彩色图像的二值化处理
4星 · 用户满意度95%
下所示:
```python
import numpy as np
import cv2
# 读取彩色图像
img = cv2.imread('color_image.jpg')
# 将图像分为黑白两个部分
rate = 0.7
k1 = rate
k2 = 0.5
# 随机生成矩阵
rand_mat = np.random.rand(img.shape[0], img.shape[1])
# 生成二值化矩阵
a1 = np.zeros_like(rand_mat)
a1[rand_mat < k1] = 1
a2 = np.zeros_like(rand_mat)
a2[rand_mat < k2] = 1
# 为每个通道添加噪声
for i in range(3):
noise = np.random.normal(0, 20, (img.shape[0], img.shape[1])) # 生成正态分布的噪声
img[:, :, i] = img[:, :, i] + noise # 添加噪声
# 将三个通道与二值化矩阵合并
result = np.zeros_like(img)
result[:, :, 0] = img[:, :, 0] * a1 + img[:, :, 1] * (1 - a1)
result[:, :, 1] = img[:, :, 1] * a2 + img[:, :, 2] * (1 - a2)
result[:, :, 2] = img[:, :, 2] * a1 + img[:, :, 0] * (1 - a1)
# 显示结果
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这样就可以将彩色图像分为黑白两个部分,并添加噪声,最终得到一个有趣的效果。
阅读全文