文章目录
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 (色调) 范围,基本能抗住光照明暗变化。