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