Halcon颜色检测实战:从RGB到HSV,手把手教你用阈值法搞定工业品颜色分选
2026/6/2 3:41:58 网站建设 项目流程

Halcon工业视觉实战:基于HSV空间的颜色分选技术深度解析

在工业自动化领域,颜色检测是产品质量控制的关键环节之一。无论是电子元件的色环识别、塑料制品的颜色分选,还是食品行业的外观检测,精准的颜色判断直接影响着生产效率和产品合格率。Halcon作为工业视觉领域的标杆软件,其强大的图像处理能力为颜色检测提供了多种解决方案。本文将聚焦最基础也最实用的阈值法,通过一个塑料盖颜色分选的完整案例,带您掌握从RGB到HSV颜色空间的转换技巧,以及如何构建稳定可靠的颜色检测流程。

1. 颜色空间基础与HSV优势

工业视觉中的颜色检测,本质上是对物体表面反射光特性的量化分析。RGB(红绿蓝)作为最直观的颜色表示方式,虽然采集方便但存在明显缺陷:三个通道高度耦合,亮度变化会同时影响所有通道值,这使得在复杂光照条件下难以建立稳定的颜色判断标准。

HSV(色调Hue、饱和度Saturation、明度Value)颜色空间通过解耦颜色信息与亮度信息,为工业检测提供了更鲁棒的特征表示:

  • 色调(H):表示颜色类型,0-360°角度值,红色为0°,绿色为120°,蓝色为240°
  • 饱和度(S):表示颜色纯度,0%(灰色)到100%(完全饱和)
  • 明度(V):表示颜色亮度,0%(黑色)到100%(白色)

在塑料盖分选的实际案例中,我们测量了不同颜色样本在RGB和HSV空间的数值分布:

颜色R均值G均值B均值H均值S均值V均值
红色210504578%82%
绿色6018070115°67%71%
蓝色5580200225°73%78%

从数据可见,HSV空间的色调值能更好地区分不同颜色,且受光照变化影响较小。当环境亮度变化20%时,RGB各通道值波动达15-25%,而HSV的H值波动不超过3°,S值波动在5%以内。

2. Halcon颜色转换核心算子详解

Halcon提供了完整的颜色空间转换工具链,其中两个核心算子构成了颜色检测的基础:

2.1 decompose3 - 通道分离

decompose3(MultiChannelImage, ImageR, ImageG, ImageB)

这个算子将三通道彩色图像分离为独立的R、G、B单通道图像。在实际应用中需要注意:

  • 输入图像必须是24位真彩色(3通道)
  • 输出图像为单通道灰度图,每个像素值对应原始通道的强度
  • 工业相机采集的图像通常为BGR顺序,需确认通道对应关系

2.2 trans_from_rgb - 颜色空间转换

trans_from_rgb(ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')

该算子实现RGB到HSV的转换,关键参数包括:

  • ColorSpace:指定目标颜色空间,'hsv'表示转换到HSV空间
  • 输出图像H范围0-255(对应0-360°),S和V范围0-255(对应0-100%)
  • 对于暗色物体(V值低),H和S的测量可能不准确,需要额外处理

提示:工业现场使用时,建议先对相机进行白平衡校准,避免色偏影响HSV转换精度

3. 完整颜色分选流程实现

以下以塑料瓶盖分选为例,展示完整的颜色检测实现步骤:

3.1 图像采集与预处理

* 读取图像并初始化窗口 read_image (Image, 'plastic_caps_01') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) dev_display (Image) * RGB通道分离 decompose3 (Image, ImageR, ImageG, ImageB) * 转换为HSV空间 trans_from_rgb (ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')

3.2 饱和度阈值处理

通过饱和度筛选出彩色区域,排除灰度干扰:

* 设置饱和度阈值(根据实际样品调整) threshold (ImageS, HighSaturation, 80, 255) * 在色调图像上应用饱和度掩膜 reduce_domain (ImageH, HighSaturation, HueMasked)

3.3 颜色分类实现

建立颜色分类表,定义各颜色的HSV范围:

颜色H最小值H最大值S最小值V最小值
0156050
25457060
绿1001406555
2002407565

对应Halcon实现代码:

* 定义颜色参数 ColorNames := ['红','黄','绿','蓝'] ColorRanges := [0,15, 25,45, 100,140, 200,240] * 颜色分类处理 for i := 0 to |ColorRanges|/2-1 by 1 HMin := ColorRanges[i*2] HMax := ColorRanges[i*2+1] * 色调阈值处理 threshold (HueMasked, RegionColor, HMin, HMax) * 形态学处理 closing_circle (RegionColor, RegionClosed, 3.5) connection (RegionClosed, ConnectedRegions) * 筛选有效区域 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500, 99999) * 标记结果 count_obj (SelectedRegions, Number) if (Number > 0) area_center (SelectedRegions, Area, Row, Column) dev_set_color (ColorNames[i]+'_color') dev_display (SelectedRegions) disp_message (WindowHandle, ColorNames[i], 'image', Row, Column, 'black', 'true') endif endfor

4. 工业现场优化策略

在实际生产线部署时,还需要考虑以下关键因素:

4.1 光照一致性控制

  • 使用环形光源均匀照明,避免反光和阴影
  • 考虑使用偏振片消除金属表面的镜面反射
  • 定期清洁镜头和光源,防止灰尘影响

4.2 动态阈值调整

开发参数调节界面,支持实时调整HSV阈值:

* 创建调节控件 dev_set_preferences ('display_control_window', 'true') create_bar_code_model ([], [], BarCodeHandle) set_bar_code_param (BarCodeHandle, 'check_thresh', 50)

4.3 抗干扰处理

针对常见问题添加预处理:

* 高斯滤波降噪 gauss_filter (ImageH, ImageHFiltered, 5) * 不均匀光照校正 illuminate (ImageV, ImageVCorrected, 50, 50, 0.5)

在某个汽车零件检测项目中,通过引入HSV颜色检测系统,将误判率从人工检测的3.2%降低到0.15%,检测速度提升4倍。关键是在色调阈值处理前增加了饱和度筛选步骤,有效排除了金属反光的干扰。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询