org.openpnp.vision.pipeline.stages.ConvertColor

文章目录

org.openpnp.vision.pipeline.stages.ConvertColor

功能

用于转换当前工作图像的颜色空间(如 BGR ↔ Gray, BGR ↔ HSV)。它不改变图像本身的视觉颜色,而是改变底层数值表示方式,使后续处理阶段能基于不同的色彩模型进行操作。

颜色空间范围 : Bgr, Rgb, Gray, Hls, Hsv

参数

conversion

目标颜色空间

例子

在ConvertColor之前,要有一个当前的原始颜色空间供ConvertColor来操作。

bash 复制代码
<cv-pipeline>
   <stages>
      <cv-stage class="org.openpnp.vision.pipeline.stages.ImageRead" name="1" enabled="true" file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\obj.png" color-space="Bgr" handle-as-captured="false"/>
      <cv-stage class="org.openpnp.vision.pipeline.stages.ConvertColor" name="0" enabled="true" conversion="Bgr2HsvFull"/>
   </stages>
</cv-pipeline>

可以转换到的目标颜色空间

图像载入后,默认是bgr

如果图像用于显示,必须从bgr转成rgb后才能显示,否则图像偏蓝。

如果图像原始颜色空间是bgr, 那么选择转换的conversion就必须是bgr2xx

e.g. Bgr2Gray, Bgr2Hsv, Bgr2HsvFull

java 复制代码
    public enum ColorCode {
        Bgr2Gray(Imgproc.COLOR_BGR2GRAY),
        Rgb2Gray(Imgproc.COLOR_RGB2GRAY),
        Gray2Bgr(Imgproc.COLOR_GRAY2BGR),
        Gray2Rgb(Imgproc.COLOR_GRAY2RGB),
        Bgr2Hls(Imgproc.COLOR_BGR2HLS),
        Hls2Bgr(Imgproc.COLOR_HLS2BGR),
        Bgr2HlsFull(Imgproc.COLOR_BGR2HLS_FULL),
        Hls2BgrFull(Imgproc.COLOR_HLS2BGR_FULL),
        Bgr2Hsv(Imgproc.COLOR_BGR2HSV),
        Hsv2Bgr(Imgproc.COLOR_HSV2BGR),
        Bgr2HsvFull(Imgproc.COLOR_BGR2HSV_FULL),
        Hsv2BgrFull(Imgproc.COLOR_HSV2BGR_FULL);

不同颜色空间的区别和用途

Bgr

Bgr : 用绿蓝红三色光的强度叠加

opencv默认载入图像的颜色空间是Bgr

用途 : 显示、图像采集、深度学习输入

做图像识别:用 RGB/BGR。模型需要保留原始分布信息。

Rgb

Rgb : 用红绿蓝三色光的强度叠加

正常图片显示的颜色空间是Rgb, 手机、网页、显示屏的标准排列

用途 : 显示、图像采集、深度学习输入

做图像识别:用 RGB/BGR。模型需要保留原始分布信息。

Gray

Gray:只有亮度信息,丢掉颜色

单通道,只有明暗深浅,数值范围 0(黑)~ 255(白)

完全没有颜色信息

算法预处理(边缘检测、人脸识别、模板匹配)。因为数据量只有彩图的 1/3,计算极快,且很多特征提取不需要颜色。

用途 :形态学处理、特征提取

做图像亮度均衡:用 HLS 的 L 通道处理,或者直接转 Gray。

Hls

HLS:更接近人类对颜色的描述(这是什么颜色?多鲜艳?多亮?),适合做颜色分割。

HLS 的 L (亮度):取 RGB 三个分量中最大值和最小值的平均值。

L = (max(R, G, B) + min(R, G, B)) / 2

这意味着,RGB(255, 0, 0) (纯红) 的 L = (255+0)/2 = 127.5,而白色 (255,255,255) 的 L=255。纯色的亮度只有白色的一半。

在 HLS 中:亮度 L = 50%(因为 (255+0)/2 = 127.5)。它看上去是"中等亮度"的色。当你把 L 从 50% 调到 100%,感觉像往红色里加白光,红色逐渐变成淡红、纯白;把 L 从 50% 调到 0%,则像往红色里加黑,变成深红、纯黑。

颜料混合(控制加白漆或黑漆的量)

HLS 在数学上对称性更好(黑白两端对称),有时用于 计算机图形学、CSS 颜色表示(CSS 中的 hsl() 函数用的就是 HLS,但它的 L 范围是 0%-100%,实际上是一个改进版,更接近感知均匀)。

亮度 (L) 关心"整体平均有多亮"。

用途 : 调色

做图像亮度均衡:用 HLS 的 L 通道处理,或者直接转 Gray。

Hsv

HSV:更接近人类对颜色的描述(这是什么颜色?多鲜艳?多亮?),适合做颜色分割。

HSV 的 V (明度):取 RGB 三个分量中的最大值。

V = max(R, G, B)

这意味着,RGB(255, 0, 0) (纯红) 的 V=255,RGB(255, 255, 255) (纯白) 的 V=255。纯色和白色在"明度"上被一视同仁。

在 HSV 中:明度 V = 100%(因为最大值是 255)。它和白色"一样明"。当你把 V 从 100% 降到 0%,感觉像给这盏彩灯调暗亮度,彩色逐渐变黑。

调光开关(控制灯的亮度)

HSV更符合人类直觉:"这个红色不够红,我把它饱和度调高;太暗了,我把它调亮(V)。" 因此在 Photoshop、色彩拾取器、图像编辑软件中更常用。

明度 (V) 关心"最强那个颜色有多亮"

用途 :颜色追踪、抠图 (如识别红色物体)

做物体追踪/颜色过滤:用 HSV。设定 H (色调) 范围,基本能抗住光照明暗变化。

END

相关推荐
LostSpeed2 个月前
openpnp2.4 - 导入kicad9.0的封装数据
openpnp
LostSpeed2 个月前
高精度juki吸嘴快拆连接器铜套座-v8 - 气密性验证
openpnp·juki吸嘴快拆连接器铜套座
LostSpeed2 个月前
openpnp - 吸嘴校验失败的处理方法
openpnp
LostSpeed2 个月前
openpnp - 测试片直径的选择 on “Calibrate precise camera ↔ nozzle N1 offsets“
openpnp
LostSpeed2 个月前
openpnp - 调试环境搭建 - use eclipse for java - v2
openpnp
LostSpeed2 个月前
openpnp - python2.7 script - 中文显示乱码,只能显示英文
python·openpnp
LostSpeed4 个月前
openpnp - Smoothieware - LPC17xx-DFU-Bootloader - 固件调试环境搭建
openpnp
LostSpeed4 个月前
openpnp - Smoothieware - MKS SGEN_L V1.0 + JLink-edu-mini 连接测试
openpnp·jlink·mks·smoothieware
LostSpeed4 个月前
openpnp - 相机模组调焦时,图像中心轴(光轴)的角度会发生轻微变化
openpnp