在计算机视觉任务中,颜色替换是一种常见的图像处理操作,广泛用于视觉增强、目标高亮、伪彩色渲染等场景。本文介绍一种简单而高效的方式,基于 OpenCV 检测图像中接近某种颜色的区域,并将其替换为反色(对比色),从而实现视觉上的突出显示。
应用背景
在工业视觉、图像分析或机器感知系统中,常常需要根据颜色分布对图像进行增强处理。例如,突出显示墨绿色区域、检测工件上涂层差异、标记某些伪装颜色区域等。
通过将图像中接近指定颜色的区域反色处理,可以快速实现对该区域的视觉增强,提升系统对颜色信息的敏感性。
关键技术概述
import cv2
import numpy as np
from pyzbar import pyzbar # 你之前用的pyzbar,虽然这段代码不需要它也可导入无妨
class FrameObject:
def __init__(self):
pass # 不保存状态
def do(self, frame, device):
# 设定核心颜色和阈值(墨绿色,BGR)
target_color = np.array([34, 70, 34]) # 墨绿色
threshold = 60
# 计算像素与目标色的距离
diff = frame.astype(np.int16) - target_color
dist = np.linalg.norm(diff, axis=2)
# 生成掩码,距离小于阈值的像素
mask = dist < threshold
# 计算反色(纯对比色)
contrast_color = 255 - target_color # 反色
# 复制一份输出图
out_frame = frame.copy()
# 替换颜色
out_frame[mask] = contrast_color
print(f"[{device}] 已替换接近颜色 {target_color.tolist()} 的区域为对比色 {contrast_color.tolist()}")
return out_frame
示例说明
假设我们处理的是一帧图像,其中某些区域为墨绿色(如标识线、标签、背景等),该方法将这些区域自动识别,并使用其对比色(淡粉色)进行替换,从而在视觉上非常突出,适合用于:
目标物视觉增强
颜色伪装检测
指定区域颜色反转
高对比图像生成(便于 AI 模型训练)
图像处理流程回顾
输入图像帧(格式为 BGR 的
numpy.ndarray
)指定目标颜色和阈值
计算所有像素到目标颜色的距离
生成布尔掩码,筛选接近颜色的像素
替换颜色为目标的反色
输出增强后的图像帧
使用建议
颜色选择:可通过图像采样工具确定目标颜色 RGB 值。
阈值调节:值越大,匹配范围越宽。可通过滑动条交互调节实现精细控制。
扩展处理:可将对比色替换为指定颜色,或结合边缘检测进一步增强边界效果。
适配平台:代码结构适用于实时图像处理系统如 PiscTrace,也可在 OpenCV 视频流中直接运行。
应用场景举例
工业检测:突出标线、识别颜色偏差部件。
安防监控:高亮指定颜色衣物区域。
智慧交通:标记车道线或交通标识颜色。
智能交互:用户界面响应颜色点击区域。
总结
本文展示了一种实用的颜色增强方案,基于 OpenCV 简洁高效地完成颜色匹配与反色替换任务。该方法不仅实现简单,而且可以灵活集成到实时图像处理系统中,用于高亮、识别与交互等多种视觉处理需求。
如需将其扩展至多种颜色或 HSV 空间处理,或集成到 PiscTrace 等可视化平台,请留言交流!