opencv-python(六):颜色空间及转换

0. 颜色模式

  • RGB 模式(百万种颜色)
  • CMYK 模式(四种印刷色)
  • 索引模式(256 种颜色)
  • 灰度模式(256 级灰度)
  • 位图模式(两种颜色)
0.1 灰度模式

也就是灰度图(黑白照片),每个像素只有明暗变化,用0~255共256个亮度级来表示,用8个bit来表示,所以每个像素信息用8bit储存.

0.2 位图模式(二值图像)

即只有纯黑和纯白两种亮度,没有渐变的亮度级,通常用0表示纯黑,1表示纯白,所以每个像素信息用1bit表示即可

0.3 RGB模式:基于发光体(电子产品)的色彩模式

即用RGB三原色表示所种颜色,每个像素储存RGB三个分量的亮度,一个像素储存需要8bit*3=24bit(当然如果有更高要求,则会超过24bit,因为一个亮度等级可能不止0~255,需要超过8bit来表示),常见的24bit色彩大概是1678万种,也就是常见的1600万真彩色。

#### 0.4
依次为:

  • 1 RGB 模式(百万种颜色)
  • 2 CMYK 模式(四种印刷色)
  • 3 索引模式(256 种颜色)
  • 4 灰度模式(256 级灰度)
  • 5 位图模式(两种颜色)

CMYK模式:基于印刷的色彩模式
cyan(青色),magenta(洋红),yellow(黄色),black(黑色)
CMYK与RGB的区别在于RGB想要某种颜色,RGB分量任意混合即可;但是CMYK作为印刷多次叠加颜色变深(这样更适合印刷)。

0.4 Lab模式:
  • L*代表亮度
  • a*代表从绿色到红色的分量
  • b*代表从蓝色到黄色的分量

基于人对颜色的感觉来设计的,感知均匀:Lab分量变化幅度和人眼感受的颜色变化幅度一样。该模式也容易调整:想要调整亮度,只需要调节亮度分量L,调节色彩就分别调整a和b分量
在这里插入图片描述

4.6 HSL(HSV)色彩模式

即色相(0-180)、饱和度(0-255)、亮度(0-255)
(Hue,Saturation,Lightness)
更符合人眼对颜色的识别,一眼观察颜色首先分辨出色相,同时色相、饱和度、亮度三个数据也容易想象出具体颜色,而RGB三个数据不能直观想象出
在这里插入图片描述

  • 对于HSV分量用归一化表示的话,H色相分量使用红色开始(红-黄-绿方向)到红色结束,那么归一化H=0.67大概表示蓝色色色相,实际H=0.6*180=120
  • S分量表示饱和度,当S=0时表示白色,当S=255,表示饱和度很高
  • V分量表示亮度,当V=0时表示黑色,当V=255,表示亮度很高
  • 所以我们表示蓝色范围可以定义(110,50,50)-(130,255,255)
4.7 索引图

索引图像包含一个数据矩阵data和一个调色板矩阵map,数据矩阵可以使uint8,uint16或双精度类型,而调色板矩阵则总是一个m*3的双精度矩阵,当图像转换成索引模式时,系统自动归纳包含大多数的256种颜色表。主要用于网络发布,例如双方标准化map颜色索引图,只需要传输uint8的数据矩阵,接收方显示时解析即可。

1. 颜色空间的转换

opencv包含了大量的颜色空间转换方法,但是最常用的就是BGR–Gray和BGR–HSV两种

  • cv2.cvtColor(input_image,flag):flag指定转换类型:
flag类型
cv2.COLOR_BGR2GRAYBGR转Gray
cv2.COLOR_BGR2HSVBGR转HSV

扩展:
cv2.COLOR_BGR2BGRA
cv2.COLOR_RGB2RGBA
cv2.COLOR_BGRA2BGR
cv2.COLOR_RGBA2RGB
cv2.COLOR_BGR2RGBA
cv2.COLOR_RGB2BGRA
cv2.COLOR_RGBA2BGR
cv2.COLOR_BGRA2RGB
cv2.COLOR_BGR2RGB
cv2.COLOR_RGB2BGR
cv2.COLOR_BGRA2RGBA
cv2.COLOR_RGBA2BGRA
cv2.COLOR_BGR2GRAY
cv2.COLOR_RGB2GRAY
cv2.COLOR_GRAY2BGR
cv2.COLOR_GRAY2RGB
cv2.COLOR_GRAY2BGRA
cv2.COLOR_GRAY2RGBA
cv2.COLOR_BGRA2GRAY
cv2.COLOR_RGBA2GRAY
cv2.COLOR_BGR2BGR565
cv2.COLOR_RGB2BGR565
cv2.COLOR_BGR5652BGR
cv2.COLOR_BGR5652RGB
cv2.COLOR_BGRA2BGR565
cv2.COLOR_RGBA2BGR565
cv2.COLOR_BGR5652BGRA
cv2.COLOR_BGR5652RGBA
cv2.COLOR_GRAY2BGR565
cv2.COLOR_BGR5652GRAY
cv2.COLOR_BGR2BGR555
cv2.COLOR_RGB2BGR555
cv2.COLOR_BGR5552BGR
cv2.COLOR_BGR5552RGB
cv2.COLOR_BGRA2BGR555
cv2.COLOR_RGBA2BGR555
cv2.COLOR_BGR5552BGRA
cv2.COLOR_BGR5552RGBA
cv2.COLOR_GRAY2BGR555
cv2.COLOR_BGR5552GRAY
cv2.COLOR_BGR2XYZ
cv2.COLOR_RGB2XYZ
cv2.COLOR_XYZ2BGR
cv2.COLOR_XYZ2RGB
cv2.COLOR_BGR2YCrCb
cv2.COLOR_RGB2YCrCb
cv2.COLOR_YCrCb2BGR
cv2.COLOR_YCrCb2RGB
cv2.COLOR_BGR2HSV
cv2.COLOR_RGB2HSV
cv2.COLOR_BGR2Lab
cv2.COLOR_RGB2Lab
cv2.COLOR_BGR2Luv
cv2.COLOR_RGB2Luv
cv2.COLOR_BGR2HLS
cv2.COLOR_RGB2HLS
cv2.COLOR_HSV2BGR
cv2.COLOR_HSV2RGB
cv2.COLOR_Lab2BGR
cv2.COLOR_Lab2RGB
cv2.COLOR_Luv2BGR
cv2.COLOR_Luv2RGB
cv2.COLOR_HLS2BGR
cv2.COLOR_HLS2RGB
cv2.COLOR_BGR2HSV_FULL
cv2.COLOR_RGB2HSV_FULL
cv2.COLOR_BGR2HLS_FULL
cv2.COLOR_RGB2HLS_FULL
cv2.COLOR_HSV2BGR_FULL
cv2.COLOR_HSV2RGB_FULL
cv2.COLOR_HLS2BGR_FULL
cv2.COLOR_HLS2RGB_FULL
cv2.COLOR_LBGR2Lab
cv2.COLOR_LRGB2Lab
cv2.COLOR_LBGR2Luv
cv2.COLOR_LRGB2Luv
cv2.COLOR_Lab2LBGR
cv2.COLOR_Lab2LRGB
cv2.COLOR_Luv2LBGR
cv2.COLOR_Luv2LRGB
cv2.COLOR_BGR2YUV
cv2.COLOR_RGB2YUV
cv2.COLOR_YUV2BGR
cv2.COLOR_YUV2RGB
cv2.COLOR_YUV2RGB_NV12
cv2.COLOR_YUV2BGR_NV12
cv2.COLOR_YUV2RGB_NV21
cv2.COLOR_YUV2BGR_NV21
cv2.COLOR_YUV420sp2RGB
cv2.COLOR_YUV420sp2BGR
cv2.COLOR_YUV2RGBA_NV12
cv2.COLOR_YUV2BGRA_NV12
cv2.COLOR_YUV2RGBA_NV21
cv2.COLOR_YUV2BGRA_NV21
cv2.COLOR_YUV420sp2RGBA
cv2.COLOR_YUV420sp2BGRA
cv2.COLOR_YUV2RGB_YV12
cv2.COLOR_YUV2BGR_YV12
cv2.COLOR_YUV2RGB_IYUV
cv2.COLOR_YUV2BGR_IYUV
cv2.COLOR_YUV2RGB_I420
cv2.COLOR_YUV2BGR_I420
cv2.COLOR_YUV420p2RGB
cv2.COLOR_YUV420p2BGR
cv2.COLOR_YUV2RGBA_YV12
cv2.COLOR_YUV2BGRA_YV12
cv2.COLOR_YUV2RGBA_IYUV
cv2.COLOR_YUV2BGRA_IYUV
cv2.COLOR_YUV2RGBA_I420
cv2.COLOR_YUV2BGRA_I420
cv2.COLOR_YUV420p2RGBA
cv2.COLOR_YUV420p2BGRA
cv2.COLOR_YUV2GRAY_420
cv2.COLOR_YUV2GRAY_NV21
cv2.COLOR_YUV2GRAY_NV12
cv2.COLOR_YUV2GRAY_YV12
cv2.COLOR_YUV2GRAY_IYUV
cv2.COLOR_YUV2GRAY_I420
cv2.COLOR_YUV420sp2GRAY
cv2.COLOR_YUV420p2GRAY
cv2.COLOR_YUV2RGB_UYVY
cv2.COLOR_YUV2BGR_UYVY
cv2.COLOR_YUV2RGB_Y422
cv2.COLOR_YUV2BGR_Y422
cv2.COLOR_YUV2RGB_UYNV
cv2.COLOR_YUV2BGR_UYNV
cv2.COLOR_YUV2RGBA_UYVY
cv2.COLOR_YUV2BGRA_UYVY
cv2.COLOR_YUV2RGBA_Y422
cv2.COLOR_YUV2BGRA_Y422
cv2.COLOR_YUV2RGBA_UYNV
cv2.COLOR_YUV2BGRA_UYNV
cv2.COLOR_YUV2RGB_YUY2
cv2.COLOR_YUV2BGR_YUY2
cv2.COLOR_YUV2RGB_YVYU
cv2.COLOR_YUV2BGR_YVYU
cv2.COLOR_YUV2RGB_YUYV
cv2.COLOR_YUV2BGR_YUYV
cv2.COLOR_YUV2RGB_YUNV
cv2.COLOR_YUV2BGR_YUNV
cv2.COLOR_YUV2RGBA_YUY2
cv2.COLOR_YUV2BGRA_YUY2
cv2.COLOR_YUV2RGBA_YVYU
cv2.COLOR_YUV2BGRA_YVYU
cv2.COLOR_YUV2RGBA_YUYV
cv2.COLOR_YUV2BGRA_YUYV
cv2.COLOR_YUV2RGBA_YUNV
cv2.COLOR_YUV2BGRA_YUNV
cv2.COLOR_YUV2GRAY_UYVY
cv2.COLOR_YUV2GRAY_YUY2
cv2.COLOR_YUV2GRAY_Y422
cv2.COLOR_YUV2GRAY_UYNV
cv2.COLOR_YUV2GRAY_YVYU
cv2.COLOR_YUV2GRAY_YUYV
cv2.COLOR_YUV2GRAY_YUNV
cv2.COLOR_RGBA2mRGBA
cv2.COLOR_mRGBA2RGBA
cv2.COLOR_RGB2YUV_I420
cv2.COLOR_BGR2YUV_I420
cv2.COLOR_RGB2YUV_IYUV
cv2.COLOR_BGR2YUV_IYUV
cv2.COLOR_RGBA2YUV_I420
cv2.COLOR_BGRA2YUV_I420
cv2.COLOR_RGBA2YUV_IYUV
cv2.COLOR_BGRA2YUV_IYUV
cv2.COLOR_RGB2YUV_YV12
cv2.COLOR_BGR2YUV_YV12
cv2.COLOR_RGBA2YUV_YV12
cv2.COLOR_BGRA2YUV_YV12
cv2.COLOR_BayerBG2BGR
cv2.COLOR_BayerGB2BGR
cv2.COLOR_BayerRG2BGR
cv2.COLOR_BayerGR2BGR
cv2.COLOR_BayerBG2RGB
cv2.COLOR_BayerGB2RGB
cv2.COLOR_BayerRG2RGB
cv2.COLOR_BayerGR2RGB
cv2.COLOR_BayerBG2GRAY
cv2.COLOR_BayerGB2GRAY
cv2.COLOR_BayerRG2GRAY
cv2.COLOR_BayerGR2GRAY
cv2.COLOR_BayerBG2BGR_VNG
cv2.COLOR_BayerGB2BGR_VNG
cv2.COLOR_BayerRG2BGR_VNG
cv2.COLOR_BayerGR2BGR_VNG
cv2.COLOR_BayerBG2RGB_VNG
cv2.COLOR_BayerGB2RGB_VNG
cv2.COLOR_BayerRG2RGB_VNG
cv2.COLOR_BayerGR2RGB_VNG
cv2.COLOR_BayerBG2BGR_EA
cv2.COLOR_BayerGB2BGR_EA
cv2.COLOR_BayerRG2BGR_EA
cv2.COLOR_BayerGR2BGR_EA
cv2.COLOR_BayerBG2RGB_EA
cv2.COLOR_BayerGB2RGB_EA
cv2.COLOR_BayerRG2RGB_EA
cv2.COLOR_BayerGR2RGB_EA
cv2.COLOR_BayerBG2BGRA
cv2.COLOR_BayerGB2BGRA
cv2.COLOR_BayerRG2BGRA
cv2.COLOR_BayerGR2BGRA
cv2.COLOR_BayerBG2RGBA
cv2.COLOR_BayerGB2RGBA
cv2.COLOR_BayerRG2RGBA
cv2.COLOR_BayerGR2RGBA
cv2.COLOR_COLORCVT_MAX

2. 利用颜色来追踪某物体

比如我们使用摄像头检测某个蓝色的物体:

  • 获取帧图像
  • 将图像转换到HSV空间
  • 设置HSV阈值到蓝色范围
    为什么不直接用RGB呢?因为即使是一切浅红色前绿色都会有蓝色分量,所以其实我们不好再BGR空间定义蓝色,如果将绿色红色分量定义为0,只设置蓝色分量,其实这样的蓝色更接近纯蓝色,限制了实际蓝色的范围。
    给出常见颜色的HSV最值范围:
    在这里插入图片描述
    具体实现参考:opencv-python掩膜操作(进阶篇之颜色追踪)
    需要用到opencv掩膜操作和HSV颜色空间两个知识点
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值