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万真彩色。

python使用RGB颜色空间的图片转换到HSV颜色空间需要除以255吗 python rgb转cmyk_灰度


依次为:

  • 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分量

python使用RGB颜色空间的图片转换到HSV颜色空间需要除以255吗 python rgb转cmyk_数据_02

4.6 HSL(HSV)色彩模式

即色相(0-180)、饱和度(0-255)、亮度(0-255)

(Hue,Saturation,Lightness)

更符合人眼对颜色的识别,一眼观察颜色首先分辨出色相,同时色相、饱和度、亮度三个数据也容易想象出具体颜色,而RGB三个数据不能直观想象出

python使用RGB颜色空间的图片转换到HSV颜色空间需要除以255吗 python rgb转cmyk_灰度_03

  • 对于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两种


flag

类型

cv2.COLOR_BGR2GRAY

BGR转Gray

cv2.COLOR_BGR2HSV

BGR转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颜色空间两个知识点