这段代码涉及了以下几个关键步骤,主要用于图像的颜色提取、替换以及区域修改。下面是对代码的详细解析:
1. 导入库
python
import cv2
import matplotlib.pyplot as plt
import numpy as np
cv2
: OpenCV库,用于图像处理。matplotlib.pyplot
: 用于绘图和显示图像。numpy
: 用于数组处理。
2. 读取并显示图像
python
image = cv2.imread("./lunwen.png")
plt.imshow(image)
cv2.imread()
:读取指定路径的图像。plt.imshow()
:使用 Matplotlib 显示图像。
3. 颜色提取与替换
python
lower_blue = (50, 0, 0)
upper_blue = (150, 255, 255)
mask = cv2.inRange(image, lower_blue, upper_blue)
- 使用
cv2.inRange()
函数创建一个掩膜,用来提取图像中蓝色区域。lower_blue
和upper_blue
定义了蓝色的颜色范围(在 HSV 颜色空间中)。
python
image[mask.astype(bool)] = (185, 28, 28)
- 将掩膜中的蓝色区域的像素值替换为
(185, 28, 28)
(红色),mask.astype(bool)
将掩膜转换为布尔值数组。
4. 修改非蓝色区域
python
white_mask = cv2.inRange(image, (255, 255, 255), (255, 255, 255))
image[np.logical_and(white_mask == 0, ~mask)] = (78, 124, 15)
- 创建一个白色掩膜,
cv2.inRange()
用来提取图像中的白色区域(完全白色的像素)。 - 使用
np.logical_and()
和~mask
,将原图中非蓝色且非白色区域的像素值替换为(78, 124, 15)
(绿色)。
5. 保存并显示图像
python
plt.imsave('E:/绝缘子/1/1/实验图/绝缘子.png', image)
plt.imshow(image)
plt.axis('off')
- 使用
plt.imsave()
将处理后的图像保存到指定路径。 plt.imshow(image)
显示修改后的图像。plt.axis('off')
禁用坐标轴显示。
6. 处理标注图像
python
quyu = cv2.imread("E:/insulator/1/1/picture/lion/label.png")
quyu = quyu.mean(axis=2)
print(quyu)
np.unique(quyu)
- 读取一个标注图像
label.png
,然后通过mean(axis=2)
将其转换为灰度图(平均化 RGB 通道)。 - 使用
np.unique()
显示灰度图中出现的唯一值。
7. 修改图像中的特定区域
python
image[quyu != 0] = (255, 0, 255)
- 在图像中,所有标注区域(
quyu != 0
)的像素被替换为紫色(255, 0, 255)
。
8. 保存修改后的图像
python
plt.imsave("E:/insulator/1/1/picture/lion/lion.png", image)
plt.imshow(image)
plt.axis('off')
- 保存并显示修改后的图像。
总结:
这段代码实现了以下功能:
- 提取并替换图像中的蓝色区域,将其改为红色。
- 将非蓝色且非白色区域修改为绿色。
- 根据标注图像(
label.png
)中非零的区域,将对应图像区域更改为紫色。 - 保存修改后的图像并进行展示。
整个流程包括了基于颜色范围的图像区域提取、颜色替换、区域修改、以及标注图像的处理,适用于图像分割和标记任务。