You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含白色文字的黑色背景图片改为灰色且无文字像素损失

仅替换黑色背景并保留白色文字的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:52:13