import cv2 import numpy as np # 读取图像 img = cv2.imread('work8.tif', -1) #转为彩色图 img1 = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # 转换为HSV hsv = cv2.cvtColor(img1, cv2.COLOR_BGR2HSV) # 设置颜色范围 lower_gray = np.array([0, 0, 100]) upper_gray = np.array([180, 50, 255]) # 创建掩膜 mask = cv2.inRange(hsv, lower_gray, upper_gray) # 去噪 kernel = np.ones((5, 5), np.uint8) opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # 获取花 flower = cv2.bitwise_and(img, img, mask=opening) cv2.imshow("test", flower) # 着色 color = np.zeros_like(img) color[..., 0] = 255 color[..., 1] = 255 color[..., 2] = 0 # 将原始图像中需要着色的部分变为蓝色 result = img.copy() result[opening > 0] = color[opening > 0] # 显示结果 cv2.imshow('result', result) cv2.waitKey(0)
时间: 2024-01-20 22:02:38 浏览: 95
这段代码是使用OpenCV实现花着色的示例代码。下面是对代码的解释:
1. 使用cv2.imread函数读取输入图像work8.tif,并使用参数-1表示读取的是原始图像,包括alpha通道。
2. 将原始图像转换为彩色图像,因为后面需要用到颜色信息。
3. 将彩色图像转换为HSV颜色空间,方便对颜色进行筛选。
4. 设置颜色范围,这里设置了灰色的颜色范围,lower_gray表示下限颜色,upper_gray表示上限颜色。
5. 使用cv2.inRange函数根据颜色范围创建掩膜,将符合范围的像素设置为白色,不符合的设置为黑色。
6. 使用cv2.morphologyEx函数对掩膜进行去噪操作,这里采用了开运算操作,可以去除一些小的噪点。
7. 使用cv2.bitwise_and函数获取花的部分,将原始图像和掩膜做按位与操作,得到的结果就是花的部分。
8. 定义一个颜色数组color,将需要着色的部分变为蓝色,这里将蓝色通道设置为255,绿色通道设置为255,红色通道设置为0。
9. 复制原始图像img,将需要着色的部分按照掩膜进行着色,将值为1的部分设置为蓝色,其余部分保持不变。
10. 显示结果,使用cv2.imshow函数展示着色后的花图像和原始图像。使用cv2.waitKey函数等待用户按下任意键,关闭窗口。
需要注意的是,这段代码仅适用于特定的输入图像,对于其他图像可能需要调整颜色范围和去噪参数等。同时,这种方法只能将灰色的花朵着色为蓝色,对于其他颜色的花朵可能需要采用其他着色策略。
阅读全文