OpenCV工业视觉实战02|色彩空间转换+灰度二值化,彻底解决厂区强光、逆光、阴影干扰(YOLO预处理必备)

📅 2026/7/13 8:43:37
OpenCV工业视觉实战02|色彩空间转换+灰度二值化,彻底解决厂区强光、逆光、阴影干扰(YOLO预处理必备)
前言上一篇我们搭建好了 OpenCV 工业开发环境掌握了图片读取、保存、窗口显示三大基础操作。在真实厂区监控、工地安防、穿戴检测场景中YOLO 模型最大的干扰不是目标难学而是环境光线不稳定正午强光曝光发白逆光画面整体偏暗树荫、设备阴影遮挡目标灯光色差导致误检、漏检单纯靠 YOLO 训练很难根治光线问题因为光线变化无穷无尽。行业标准工程方案用 OpenCV 做前置图像归一化再送入 YOLO 推理。本节课带你吃透工业项目最常用的色彩空间转换 灰度处理 二值化阈值分割专门用于弱化光线干扰、强化目标特征完美适配安全帽、防护服、裸露皮肤检测场景。一、工业场景必懂为什么要转色彩空间摄像头原始画面是BGROpenCV 默认色彩信息杂乱、亮度耦合严重。工业检测不需要花哨颜色只需要亮度、对比度、明暗层次。所以工程上 90% 的安防预处理第一步都是转灰度图 二值化。二、BGR 转灰度图最核心预处理灰度图特点去除色彩干扰只保留明暗结构大幅降低YOLO算力、过滤环境杂色。完整可运行代码import cv2 # 读取原图 img cv2.imread(test.jpg) if img is None: print(图片读取失败) else: # BGR转灰度图 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow(Original, img) cv2.imshow(Gray Image, gray) cv2.imwrite(gray_result.jpg, gray) cv2.waitKey(0) cv2.destroyAllWindows()工业实战价值在人员裸露检测、安全帽检测中衣服颜色五花八门、背景五颜六色 → 转灰度直接干掉颜色干扰模型只看轮廓与明暗大幅降低误检。三、HSV色彩空间工业颜色筛选神器如果你需要精准识别特定颜色目标黄色安全帽、红色警示服灰度图就不够用必须用HSV。HSV 优势分离颜色、亮度、饱和度不怕光线明暗变化是工业颜色筛选的标准方案。BGR转HSV代码import cv2 img cv2.imread(test.jpg) hsv cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.imshow(HSV, hsv) cv2.waitKey(0) cv2.destroyAllWindows()后续我们会用 HSV过滤黄色安全帽、深色工装、皮肤颜色配合 YOLO 做二次校验大幅提升准确率。四、工业核心图像二值化黑白分割灰度图依然有 0–255 多级亮度二值化直接把图片变成只有纯黑、纯白。极致过滤背景、阴影、杂点突出目标轮廓。1. 固定阈值二值化适合光线稳定厂区import cv2 img cv2.imread(test.jpg) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化大于127为纯白小于127为纯黑 ret, binary cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) cv2.imshow(Binary, binary) cv2.waitKey(0) cv2.destroyAllWindows()2. 自适应二值化强烈推荐适配强光/逆光固定阈值在逆光、局部阴影场景直接失效自适应阈值会局部自动计算明暗是工业监控的最优解import cv2 img cv2.imread(test.jpg) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 自适应二值化专治光线不均匀 binary_adp cv2.adaptiveThreshold( gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blockSize15, C3 ) cv2.imshow(Adaptive Binary, binary_adp) cv2.waitKey(0) cv2.destroyAllWindows()适用场景厂房逆光、窗边反光、局部阴影、光照不均的所有监控画面。五、YOLO 工业项目联动完整预处理流水线给你一套可以直接嵌入 YOLO 推理的工业预处理标准代码流程原图 → 灰度归一化 → 自适应二值化 → 送入YOLOimport cv2 from ultralytics import YOLO model YOLO(best.onnx) # 读取画面 frame cv2.imread(factory.jpg) # OpenCV工业预处理 gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) binary cv2.adaptiveThreshold( gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 3 ) # 单通道转3通道适配YOLO rgb_frame cv2.cvtColor(binary, cv2.COLOR_GRAY2BGR) # YOLO推理 results model.predict(rgb_frame, imgsz1280, conf0.2) for res in results: img res.plot() cv2.imwrite(warn_result.jpg, img) cv2.imshow(Detect, img) cv2.waitKey(0) cv2.destroyAllWindows()六、工业项目落地总结BGR2GRAY去除杂色干扰稳定模型识别HSV转换精准颜色筛选用于安全帽、工装识别自适应二值化解决厂区90%光线不均、阴影、逆光问题预处理YOLO联动工业级标准落地架构七、下篇预告下一篇讲解五大工业滤波降噪算法解决监控画面噪点、雪花、镜头灰尘、模糊干扰进一步降低 YOLO 误检