如何将含白色文字的黑色背景图片改为灰色且无文字像素损失
仅替换黑色背景并保留白色文字的OpenCV解决方案
核心思路
精准识别图片中的黑色背景像素,仅对该区域进行颜色替换,完全不修改白色文字的像素值,避免文字丢失或模糊。
彩色图片处理代码
import cv2 import numpy as np # 读取目标图片(OpenCV默认以BGR格式加载) img = cv2.imread('bus_image.jpg') # 定义黑色像素的范围(可根据实际图片微调上下限,适配非纯黑背景) lower_black = np.array([0, 0, 0], dtype=np.uint8) upper_black = np.array([30, 30, 30], dtype=np.uint8) # 创建掩码:标记所有黑色区域(掩码中255对应黑色像素) mask = cv2.inRange(img, lower_black, upper_black) # 仅将掩码标记的黑色区域替换为灰色(BGR格式的灰色为(128,128,128)) img[mask == 255] = [128, 128, 128] # 保存处理后的图片并预览 cv2.imwrite('bus_gray_bg.jpg', img) cv2.imshow('Processed Image', img) cv2.waitKey(0) cv2.destroyAllWindows()
灰度图片处理代码
如果原始图片是灰度格式,可使用以下简化版本:
import cv2 import numpy as np # 以灰度模式读取图片 gray_img = cv2.imread('bus_image.jpg', cv2.IMREAD_GRAYSCALE) # 定义黑色像素的灰度范围 lower_black = 0 upper_black = 30 # 创建掩码 mask = cv2.inRange(gray_img, lower_black, upper_black) # 替换黑色区域为灰色(灰度值128) gray_img[mask == 255] = 128 # 保存结果 cv2.imwrite('bus_gray_bg_gray.jpg', gray_img)
关键注意事项
- 黑色范围调整:如果背景存在偏灰的噪点或非纯黑区域,可适当提高
upper_black的数值(如调整至40),确保仅选中目标背景;如果文字边缘有被误替换的情况,降低upper_black数值即可。 - 避免过度处理:不要使用模糊、阈值二值化等可能破坏文字像素的预处理步骤,直接通过掩码定位替换是最安全的方式。
内容的提问来源于stack exchange,提问作者Nitya Rakhe
相关产品推荐
相关产品推荐

