使用OpenCV替换图像两种背景色为黑色并优化文字显示
解决方案
问题分析
你之前的代码仅通过bitwise_and保留了掩码内的区域,但未将文字转为纯白色,且颜色范围定义不准确,导致背景未完全变为黑色。
修正后的代码
import cv2 import numpy as np # 读取目标图像 image = cv2.imread("image1.png") # 转换为HSV色彩空间,更易区分绿色与灰色背景 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 定义绿色的HSV范围(可根据实际图像微调) lower_green = np.array([35, 40, 40]) upper_green = np.array([85, 255, 255]) # 定义灰色的HSV范围(低饱和度、亮度适中) lower_gray = np.array([0, 0, 50]) upper_gray = np.array([180, 50, 200]) # 分别生成绿色、灰色背景的掩码 mask_green = cv2.inRange(hsv, lower_green, upper_green) mask_gray = cv2.inRange(hsv, lower_gray, upper_gray) # 合并背景掩码 mask_background = cv2.bitwise_or(mask_green, mask_gray) # 创建全黑的结果图像 result = np.zeros_like(image) # 生成文字区域掩码(背景掩码取反) mask_text = cv2.bitwise_not(mask_background) # 可选:形态学闭运算,消除文字边缘模糊 kernel = np.ones((2, 2), np.uint8) mask_text = cv2.morphologyEx(mask_text, cv2.MORPH_CLOSE, kernel) # 将文字区域设为纯白色 result[mask_text > 0] = [255, 255, 255] # 保存结果 cv2.imwrite("processed_image.png", result) # 显示结果 cv2.imshow("Processed Image", result) cv2.waitKey(0) cv2.destroyAllWindows()
代码说明
- HSV空间处理:相比BGR,HSV能更精准区分绿色(通过H通道范围)和灰色(通过低S通道)。
- 掩码合并:将绿色和灰色背景的掩码合并,一次性定位所有需要转为黑色的区域。
- 文字区域处理:对背景掩码取反得到文字区域,直接将该区域设为纯白色。
- 形态学操作:可选的闭运算可以消除文字边缘的模糊感,让文字更锐利。
内容的提问来源于stack exchange,提问作者Colateral
相关产品推荐
相关产品推荐

