精华内容
下载资源
问答
  • 概述本文章会详细的介绍RGB颜色空间与RGB三色中色调、饱和度、亮度之间的关系,最后会介绍HSV颜色空间!一.RGB颜色空间1.起源RGB三原色起源于上世纪初1809年ThomasYoung提出视觉的三原色学说,随后Helmholtz在1824...

    一.概述

    本文章会详细的介绍RGB颜色空间与RGB三色中色调、饱和度、亮度之间的关系,最后会介绍HSV颜色空间!

     

    一.RGB颜色空间

    1. 起源

       RGB三原色起源于上世纪初1809Thomas Young提出视觉的三原色学说,随后Helmholtz1824年也提出了三原色学说即:视网膜存在三种视锥细胞,分别含有对红、绿、蓝三种光线敏感的视色素,当一定波长的光线作用于视网膜时,以一定的比例使三种视锥细胞分别产生不同程度的兴奋,这样的信息传至大脑中枢,就产生某一种颜色的感觉。

    在显示器发明之后,从黑白显示器发展到彩色显示器,人们开始使用发出不同颜色的光的荧光粉(CRT,等离子体显示器),或者不同颜色的滤色片(LCD),或者不同颜色的半导体发光器件(OLED和LED大型全彩显示牌)来形成色彩,无一例外的选择了Red,Green,Blue这3种颜色的发光体作为基本的发光单元。通过控制他们发光强度,组合出了人眼睛能够感受到的大多数的自然色彩。         

    计算机显示彩色图像的时候也不例外,最终显示的时候,要控制一个像素中Red,Green,Blue的值,来确定这个像素的颜色。计算机中无法模拟连续的存储从最暗到最亮的量值,而只能以数字的方式表示。于是,结合人眼睛的敏感程度,使用3个字节(3*8位)来分别表示一个像素里面的Red,Green 和Blue的发光强度数值,这就是常见的RGB格式。我们可以打开画图板,在自定义颜色工具框中,输入r,g,b值,得到不同的颜色。

    2. 概述

    RGB颜色空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。

    RGB空间是生活中最常用的一个颜色显示模型,电视机、电脑的CRT显示器等大部分都是采用这种模型。自然界中的任何一种颜色都可以由红、绿、蓝三种色光混合而成,现实生活中人们见到的颜色大多是混合而成的色彩。

    肉眼可以识别世界上的所有颜色,而RGB几乎可以组合成世界上所有的颜色!

    2. RGB颜色范围

    RGB的每个元素在计算机内存中占用1个字节,1个字节等于8个bit位,所以RGB每个元素的取值范围为:0~256(2的8次方)(从2开始算次方我个人觉得是因为bit位,因为一个bit位可以表示两种状态)

    那么三色组合起来256x256x256=16777216(一千六百七十七万七千二百一十六)种颜色,这么多的颜色几乎可以覆盖世界上所有的颜色!所以平常电视机、电脑屏幕、任何显示仪器都会通过这种RGB颜色空间来显示!

    3. 组合方法

    组合方法是通过互补光的形式来组合成任意颜色的

    例如:

    红色 + 绿色 = 黄色

    如图:

     

    红色 + 绿色 +蓝色 = 白色

    如图:

     

    你也可以调整RGB某一元素的色值来达到不同的颜色组合!

     

    3. RGBA

    RGBA(Alpha),A用于描述三原色的透明度!

    例如:

     

    4. RGB文件存储类型

    RGB色彩空间根据每个分量在计算机中占用的存储字节数分为如下几种类型:

    (1)RGB555

    RGB555是一种16位的RGB格式,各分量都用5位表示,剩下的一位不用。

    高字节 -> 低字节(根据内存大小端)

    XRRRRRGGGGGBBBBB(X代表不用)

    (2)RGB565

    RGB565也是一种16位的RGB格式,但是R占用5位,G占用6位,B占用5位。

    (3)RGB24

    RGB24是一种24位的RGB格式,各分量占用8位,取值范围为0-255。

    (4)RGB32

    RGB32是一种32位的RGB格式,各分量占用8位,剩下的8位作Alpha通道或者不用。

    (5)RGB222

    RGB222是一种8位的RGB格式,各分量占用2bit位,剩下的2bit位不用!

    注意这种格式一般用于灰度图,现在的CRT(阴极射线管)都是彩色RGB模型的CRT,所以在显示灰度图时都是放射RGB颜色模板(荧光粉)来做到显示颜色的,也就是说每个像素点上的荧光粉有三个RGB,所以显示灰度图时也就是单通道的图片时,是通过混合RGB来达到灰度色的!

    还有RGB232,RGB332,RGB233,...

    早期的CRT只能显示黑白照是因为工业水平有限,注意也不一定是黑白色,也有可能是单色,如红色,暗红,紫色,暗紫,只能显示一种颜色!

    5.单通道与多通道

     单通道:

    俗称灰度图,每个像素点只能有一个值表示颜色,它的像素值在0到255之间,0是黑色,255是白色,中间值是一些不同等级的灰色,可以说灰度是黑与白之间的过渡色!

    注意这个值不是RGB里的任何一个元素,显示设备是直接通过CRT(彩色阴极射线显像管)将单通道里的像素值显示黑白色图像,值越高黑色图越亮,一般灰度值大小不会超过125!

    多通道:

    多通道也就是RGB三原色,每个像素点有三个字节来表示(RGB),分别最大取值范围是0-255,可以组合成千万种颜色。

    图像处理优势对比:

    单通道往往应用于图像处理,因为单通道只有一个像素点(一个字节),所以相比多通道三个字节,处理速度上要尤为的快!

    而且单通道能将图像以灰度形式显示出来,不会影响图像识别,和特征提取!

    多通道以原图的形式将图像展示出来,所以可以提取特征很多,识别率高!

    例如:

     

    多通道也可以组合成灰度图,上面说过,红+绿+蓝=白色,注意这里补充一下,只有在三色相等时才会组合成白色!

     

    例如:

     

    想要达到灰度只要将RGB三色调低一点就可以达到!

    例如:

     

    但是当某一方的值不相同时就会产生其他颜色。

     

    所以三通道想要组合成黑白色(灰度)必须三原色值相同。

    也就是说灰度图不一定是单通道,但是单通道一定是灰度图!

     

    三. 色调、饱和度、亮度

    色调(色相):

      彩色图片中,色调决定彩色图片更加偏于哪一方!

    列如:

     

    我们修改一下色调

    当把色调调低时,颜色更加偏向于红色

     

    当我们把色调调高一点时,颜色更加偏向于绿色

     

    当颜色在调高一点时,颜色更加偏向于蓝色

     

    所以由此可以得出色调是决定一个像素点中的颜色更偏向于哪一方(RGB)

     

    2. 饱和度

    饱和度决定了颜色空间中颜色分量,饱和度越高,说明颜色越深,饱和度越低,说明颜色越浅!

    如图:

    当饱和度为55时,可以发现该颜色空间能显示的颜色分量非常低

     

    当我把饱和度调高一点时,可以发现颜色分量显示的明显要深!

     

    可以与上图形成鲜明的对比。

     

    所以饱和度在颜色空间中是起到一个控制RGB组合色的颜色深度的作用。

     

    3.亮度

     亮度决定颜色空间中颜色的明暗程度!

    如图,亮度设置比较高的时候会发现颜色显示的较为鲜艳

     

    当我们把亮度调低一点时

    会发现颜色会变得非常暗!

     

    所以亮度在颜色空间中起到一个控制RGB组合色的明暗程度的作用。

    下面有个答案是我在知乎上看到的觉得非常适合描述色调(色相)、饱和度、亮度与颜色空间的关系:

     

    1. 明度为0的时候,只有一个点,只能是黑色。没有光,啥都看不见。
    后面我们要让明度是某个不为零的值,才好谈下去。基于这个条件,
    2. 纯度为0的时候,只有一条线,只能是黑白的。没有对比度,就没有彩色。

    3. 纯度也不为0了,才可能出现彩色,至于到底是哪一种颜色,就要看色度了。

     

    不知道大家有没有发现,无论你怎么修改色调,饱和度,亮度,RGB三色值会跟随而变化,其实色调,饱和度,亮度都是通过特定的算法经过计算修改RGB三色而达到的控制颜色效果!

     

    本栏属于图像理论知识不提供任何实践代码!

     

     

    四. HSV颜色空间 (部分地方是参考他人博客的文章,然后根据自己的理解写出来的!)

    1. 起源

    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。

     

    这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

    2. HSV颜色模型介绍

    2.1色调H(Hue

    用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°0°-  359°时颜色会依次变换当角度到达360°时也就是红色,角度也就又回到0°了,所以总共为360°,每变换1°时,色相就会有轻微的变化!如果是顺时针的话这个变换过程会从红色逐渐变换到绿色,在由绿色逐渐变换到蓝色,在由蓝色逐渐变换到红色!逆时针的话就是相反的!

     

    2. 2饱和度 S(Saturation

    饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

     

    2.3明度V(Value

    明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;通常取值范围为0%(黑)到100%(白)。

     

    2.4模型分析:

     

    H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。HSV中每一种颜色的互补色分别相差180度。意思就是说:两种颜色在互补时最大为180°

    例如:

    在HSV模型中红与绿的互补色为黄色,其角度为60°

     

    绿色与蓝色的互补光为青色其角度也为60°

     

    蓝色与红色的互补光为品红色其角度也为60°

     

    那么按逆反的方向来算,绿色到红色的互补光为60°

     

    蓝色到绿色的互补光也为60°

     

    红色到蓝色的互补光也为60°

     

    所以通过以上知识可以知道,红色到到绿色之间的互补光为60°,而绿色到红色之间的互补光也为60°所以每一种颜色的色差是:60°+  60°=  160°

     

    互补光的色差在HSV颜色模型中是这样来算的!

    纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。

    V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。 

    2.5 HSV颜色分析

    HSV对用户来说是一种直观的颜色模型。我们可以从一种纯色彩开始,即指定色彩角H,并让V=S=1,然后我们可以通过向其中加入黑色和白色来得到我们需要的颜色。增加黑色可以减小V而S不变,同样增加白色可以减小S而V不变。例如,要得到深蓝色,V=0.4 S=1 H=240度。要得到浅蓝色,V=1 S=0.4 H=240度。

     

    如图:

     

     一般说来,人眼最大能区分128种不同的色彩,130种色饱和度,23种明暗度。如果我们用16Bit表示HSV的话,可以用7位存放H,4位存放S,5位存放V,即745或者655就可以满足我们的需要了。

     

    由于HSV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛,如Photoshop(在Photoshop中叫HSB)等等,但这也决定了它不适合使用在光照模型中,许多光线混合运算、光强运算等都无法直接使用HSV来实现

     

    RGB颜色空间更加面向于工业,而HSV更加面向于用户,大多数做图像识别这一块的都会运用HSV颜色空间,因为HSV颜色空间表达起来更加直观!

     

     

     

     

     

     

    展开全文
  • RGB颜色空间

    2013-03-22 14:38:33
    RGB颜色空间的一点儿介绍,附带代码,在VC++2010 Express 和 OpenCV 2.4.3下调试通过。
  • RGB色彩空间

    2019-08-05 10:30:52
    RGB色彩空间中每个像素点包含了R、G、B三种分量。RGB存储模式也有packed和planar两类,RGB色彩空间及存储模式比较简单,下面介绍几个有代表性的存储模式。 1 存储模式RGB565 使用16b(bit)表示一个像素,5b用于R,...

    RGB色彩空间中每个像素点包含了R、G、B三种分量。RGB存储模式也有packed和planar两类,RGB色彩空间及存储模式比较简单,下面介绍几个有代表性的存储模式。

    1 存储模式RGB565

    使用16b(bit)表示一个像素,5b用于R,6b用于G,5b用于B。如下:

    1
    2
    [ R G B ]  [ R G B ]  [ R G B ]  [ R G B ]
    [ R G B ]  [ R G B ]  [ R G B ]  [ R G B ]

    以上只是示意图,实际R、G、B顺序可能与图中不同。

    2 存储模式RGB888

    使用24位来表示一个像素,每个分量都用8位表示。其示意图跟RGB565示意图类似。

    3 存储模式ARGB8888

    使用32位来表示一个像素,R、G、B都用8位表示,另外A(Alpha)表示透明度,也用8位表示。

    1
    2
    [ A R G B ]  [ A R G B ]  [ A R G B ]  [ A R G B ]
    [ A R G B ]  [ A R G B ]  [ A R G B ]  [ A R G B ]

    以上只是示意图,实际A、R、G、B顺序可能与图中不同。

    展开全文
  • RGB 色彩空间

    2020-10-19 00:00:00
    单反相机里有色彩空间的设置,后期软件如 Ps 等中也有色彩空间的选择或指定。色彩空间的选择对于色彩的正确显示或打印输出非常重要。◆◆◆什么是色彩空间所以称之为“色彩空间”,是因为...

    单反相机里有色彩空间的设置,后期软件如 Ps 等中也有色彩空间的选择或指定。色彩空间的选择对于色彩的正确显示或打印输出非常重要。

      ◆  ◆

    什么是色彩空间

    所以称之为“色彩空间”,是因为可以用 3 个及以上的相互独立的向量将所有色彩构成一个三维空间,以便进行色彩研究与计算。

    色彩空间有时候也被称为“色彩模型”。然而它们还是各有侧重,色彩空间侧重于颜色的标识,色彩模型则偏重颜色的生成。

      ◆  ◆

    常见的 RGB 色彩空间

    常见的 RGB 色彩空间有:sRGB、Adobe RGB(1998)、Apple RGB、 ProPhoto RGB等。

    在摄影后期中常用的色彩空间是:sRGB 、Adobe RGB 以及 ProPhoto RGB。

    它们包含色彩的范围大小的顺序是:

    ProPhoto RGB > Adobe RGB > sRGB

    比如, AdobeRGB 要比 sRGB 多出约 35%。 

      ◆  ◆

    单反相机中的色彩空间选择

    由于 Raw 格式并没有直接记录色彩信息,所以在单反相机中设置的色彩空间仅影响 JPEG 格式的照片。Raw 格式的照片会在进入转片软件如 Lightroom、ACR 等时,映射到软件里所选择的色彩空间上。

    所以,如果用 Raw 格式拍片,单反相机内设置哪个色彩空间都无所谓。但进入转片软件里,建议选择范围更广的 ProPhoto RGB 色彩空间。

      ◆  ◆

    sRGB 色彩空间

    sRGB 色彩空间是惠普公司与微软公司于 1996 年一起开发的用于显示器、打印机以及因特网的一种标准 RGB 色彩空间 Standard Red Green Blue。sRGB 最初设计的目的是作为生成在因特网以及万维网上浏览的图像的通用色彩空间,最后选择的是使用 Gamma 校准系数为 2.2 的色彩空间,即 CRT 显示器在这种情况下的平均线性电压响应。

    目前,互联网浏览仅支持 sRGB 色彩空间,不支持 Adobe RGB 和  ProPhoto RGB。

    大多数显示屏(包括手机屏),也都只支持 sRGB 的色彩范围。除了少数专业显示器外,目前大部分显示器都不能显示出 Adobe RGB 色彩空间中的全部颜色,比如,报价高达四万的艺卓 Eizo Color Edge CG318-4k,可显示色彩 10.7 亿,也仅支持 99% 的 Adobe RGB 色域,更不用说范围更大的 ProPhoto RGB 了。

    另外,也有很多显示屏不能 100% 呈现 sRGB 色彩空间的所有色彩,所以在购买修图用显示器时注意这一点。

      ◆  ◆

    Adobe RGB 色彩空间

    Adobe RGB 色彩空间是 Adobe Systems 于 1998 年开发的色彩空间。其目的是为了尽可能在 CMYK 彩色印刷中利用计算机显示器等设备的 RGB 颜色模式上囊括更多的颜色。Adobe RGB 色彩空间粗略包括了 50% 的 Lab 色彩空间中的可视色彩,主要在青绿色 cyan-green色系上有所提升。

    随着打印技术的进步,现在有不少打印机直接支持 Adobe RGB 色彩空间,有些色彩打印出来后甚至超出 Adobe RGB 色彩空间范围。

    所以,如果处理的照片要打印,编辑照片时最好选择 Adobe RGB 色彩空间。

      ◆  ◆

    ProPhoto RGB 色彩空间

    ProPhoto RGB 色彩空间比以上的各种色彩空间都大,甚至可以表示很多肉眼无法识别的颜色。ProPhoto RGB 色彩空间与大部分专业相机能记录的色彩范围最为接近。所以,许多摄影后期软件将它作为默认的色彩空间。

    既然显示器显示不了,打印机打印不出,为什么我们还要在后期软件里选择 ProPhoto RGB 色彩空间呢?道理其实就是一句话:空间越大越自由。就如 Ps 默认选择 16 位/通道而不是 8 位/通道的位深度一样。另外一个理由就是前面所说的,满足一些高端印刷的需要。

      ◆  ◆

    Lab 色彩空间

    Lab 色彩空间比所有的显示屏甚至比人类视觉的色彩范围都要大。Lab 模式既不依赖光线,也不依赖于颜料,它是 CIE 组织确定的一个理论上包括了人眼可以看见的所有色彩的色彩模式。

    在 Ps 中 Lab 色彩空间是在 Lab 颜色模式下管理的。由于 Lab 颜色模式下定义的色彩最多且处理速度快,通常将其作为色彩模式转换时的中间模式。

    有关Lab 颜色模式的知识请参阅《Lab 颜色模式》。

      ◆  ◆

    摄影及后期色彩空间建议

    1、单反相机的色彩空间设置为:Adobe RGB。

    2、将 Raw 格式用 Lightroom 转片,或者从 Lightroom 进 Ps 编辑时,保持默认的 ProPhoto RGB 色彩空间不变。

    3、如果由 ACR 转片并从 ACR 进 Ps,则更改一下设置(见下图位置)。

    4、Ps 中的颜色设置也可更改为 ProPhoto RGB 色彩空间。

    Ps菜单:编辑/颜色设置

    5、用于发布到网络上的照片,色彩空间一定要选 sRGB;对于要打印输出的照片,色彩空间建议为 Adobe RGB 或 ProPhoto RGB。

    6、如果在 Ps 中直接输出,建议先更改为 Lab 颜色模式,再转变为 RGB 模式或 CMYK 模式。

    “有钱的捧个钱场,好看的点下在看”

    展开全文
  • 本代码基于matlab平台制作RGB色彩空间立方体模型。可360°全方位观测
  • RGB颜色空间转化为lab 颜色空间。lab颜色空间符合人的视觉特性。
  • RGB色彩空间和HSV色彩空间的理解

    千次阅读 2018-08-17 15:38:19
    2、HSV色彩空间(附HSV颜色分量范围表) 3、RGB到HSV的转换的Demo   使用OpenCV实现RGB转HSV,并通过滑动条动态设定HSV阈值   自己写程序,实现RGB转HSL   1、RGB色彩空间 RGB色彩空间源于使用阴极射线管的...

    RGB色彩空间和HSV色彩空间的理解

    本文的结构如下:
    1、RGB色彩空间
    2、HSV色彩空间(附HSV颜色分量范围表)
    3、RGB到HSV的转换的Demo
      使用OpenCV实现RGB转HSV,并通过滑动条动态设定HSV阈值
      自己写程序,实现RGB转HSL

     

    1、RGB色彩空间

    RGB色彩空间源于使用阴极射线管的彩色电视,RGB分别代表三个基色(R-红色、G-绿色、B-蓝色),具体的色彩值由三个基色叠加而成。在图像处理中,我们往往使用向量表示色彩的值,如(0,0,0)表示黑色、(255, 255, 255)表示白色。其中,255表示色彩空间被量化成255个数,最高亮度值为255(255 = 2^8 - 1,即每个色彩通道用8位表示)。在这个色彩空间中,有256*256*256种颜色。RGB色彩空间如下图所示(图片来自百度百科)。是一个包含Red、Green、Blue的三维空间。

    这里写图片描述

    注:
    1、在OpenCV中,RGB色彩空间的顺序是BGR,千万不要弄错了
    2、在Java的Bitmap中,RGB色彩空间被表示为ARGB,其中A代表透明度

    2、HSV色彩空间

    HSV色彩空间(Hue-色调、Saturation-饱和度、Value-值)将亮度从色彩中分解出来,在图像增强算法中用途很广。在我本人接触的图像处理项目中,经常将图像从RGB色彩空间转换到了HSV色彩空间,以便更好地感知图像颜色,利用HSV分量从图像中提取感兴趣的区域。

    HSV色彩空间也被称为HSB(色调、饱和度、亮度),在PS中常被用到。

    HSV色彩空间如下图所示,用一个倒圆锥体表示整个色彩空间:

    这里写图片描述

    注:
    1、H的范围是[0,360),S和V的范围是[0,1]。但是在OpenCV 中,HSV好像被规范化到了[0, 255],此处求大神指导。
    2、另外,网上有人总结了HSV颜色对应RGB的分量范围,见下面的表格。参考自:
    http://www.cnblogs.com/wangyblzu/p/5710715.html
    http://blog.csdn.net/taily_duan/article/details/51506776

    这里写图片描述

    3、RGB到HSV的转换的Demo

    (1) 使用OpenCV的cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

    OpenCV为我们提供了现成的函数cvtColor(),帮助我们将图像从BGR转换到HSV。

    # -*- coding:utf-8 -*-
    
    import cv2
    
    """
    功能:读取一张图片,显示出来,并转化为HSV色彩空间
    """
    image = cv2.imread('images/my_wife2.jpg') # 根据路径读取一张图片
    cv2.imshow("BGR", image) # 显示图片
    
    
    # 转化图片到HSV色彩空间
    dst = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    cv2.imshow("HSV", dst) # 显示图片
    cv2.waitKey(0) # 等待键盘触发事件,释放窗口
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    结果如下:

    这里写图片描述

    挺好看的美女,结果被弄成了这个样子。一些初学者包括我自己有时会问,为什么要把好端端的图片转成HSV色彩空间呢。其实这样做大有用处,比如我们要提取美女的头发区域,就可以通过设置HSV色彩空间的高低阈值来做。

    # -*- coding:utf-8 -*-
    
    import cv2
    import numpy as np   # ------------------改变1
    
    """
    功能:读取一张图片,显示出来,并转化为HSV色彩空间
    """
    image = cv2.imread('images/my_wife2.jpg') # 根据路径读取一张图片
    cv2.imshow("BGR", image) # 显示图片
    
    
    # 转化图片到HSV色彩空间
    dst = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    cv2.imshow("HSV", dst) # 显示图片
    
    
    # 根据HSV提取头发 --------------------------------改变2
    low_hsv = np.array([0, 0, 46])
    high_hsv = np.array([200, 40, 220])
    dst = cv2.inRange(dst, low_hsv, high_hsv)
    cv2.imshow("result", dst) # 显示图片
    
    cv2.waitKey(0) # 等待键盘触发事件,释放窗口
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    程序的运行效果如下。我们看到,头发区域显示为白色,这样我们就初步地提取出了头发区域。当然这个效果并不理想,是因为我们设定的阈值不好,如果能动态地设定阈值就好了。

    这里写图片描述

    我们可以利用滑块动态地设置阈值,一边拖动滑块,一边观察图像。OpenCV提供了createTrackbar(),用于创建滑块。代码如下:

    # -*- coding:utf-8 -*-
    
    import cv2
    import numpy as np
    
    """
    功能:读取一张图片,显示出来,转化为HSV色彩空间
         并通过滑块调节HSV阈值,实时显示
    """
    
    image = cv2.imread('images/my_wife2.jpg') # 根据路径读取一张图片
    cv2.imshow("BGR", image) # 显示图片
    
    hsv_low = np.array([0, 0, 0])
    hsv_high = np.array([0, 0, 0])
    
    # 下面几个函数,写得有点冗余
    
    def h_low(value):
        hsv_low[0] = value
    
    def h_high(value):
        hsv_high[0] = value
    
    def s_low(value):
        hsv_low[1] = value
    
    def s_high(value):
        hsv_high[1] = value
    
    def v_low(value):
        hsv_low[2] = value
    
    def v_high(value):
        hsv_high[2] = value
    
    cv2.namedWindow('image')
    cv2.createTrackbar('H low', 'image', 0, 255, h_low) 
    cv2.createTrackbar('H high', 'image', 0, 255, h_high)
    cv2.createTrackbar('S low', 'image', 0, 255, s_low)
    cv2.createTrackbar('S high', 'image', 0, 255, s_high)
    cv2.createTrackbar('V low', 'image', 0, 255, v_low)
    cv2.createTrackbar('V high', 'image', 0, 255, v_high)
    
    while True:
        dst = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # BGR转HSV
        dst = cv2.inRange(dst, hsv_low, hsv_high) # 通过HSV的高低阈值,提取图像部分区域
        cv2.imshow('dst', dst)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cv2.destroyAllWindows()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    程序运行的效果如下,我们拉动滑块会自动改变HSV的高低阈值,进而根据高低阈值提取的图像区域也会改变:

    这里写图片描述

    (2) 自己编写程序实现RGB转HSL

    根据维基百科,RGB转HSV的公式如下: 设 (r, g,b)分别是一个颜色的红、绿和蓝坐标,它们的值是在0到1之间的实数。设max等价于r,g和b中的最大者。设min等于这些值中的最小者。要找到在HSL空间中的 (h, s, l)值,这里的h ∈ [0,360)度是角度的色相角,而s, l ∈ [0,1]是饱和度和亮度,计算为:

    这里写图片描述

    如果要转化为HSV)h的值通常规范化到位于0到360°之间。而h = 0用于max = min的(就是灰色)时候而不是留下h未定义。HSL和HSV有同样的色相定义,但是其他分量不同。HSV颜色的s和v的值定义如下:

    这里写图片描述

    根据以上公式,我们可以写出RGB转HSV的代码:

    def rgb2hsv(r, g, b):
        r, g, b = r / 255.0, g / 255.0, b / 255.0
        mx = max(r, g, b)
        mn = min(r, g, b)
        diff = mx - mn
    
        # 计算H
        if mx == mn:
            h = 0
        elif mx == r:
            if g >= b:
                h = 60 * ((g - b) / diff) + 0
            else:
                h = 60 * ((g - b) / diff) + 360
        elif mx == g:
            h = 60 * ((b - r) / diff) + 120
        elif mx == b:
            h = 60 * ((r - g) / diff) + 240
    
        # 先计算L
        l = (mx + mn) / 2.0
    
        # 再计算S
        if mx == min:
            s = 0
        elif l > 0 and l <= 0.5:
            s = (diff / l) / 2.0
        elif l > 0.5:
            s = (diff / (1 - l)) / 2.0
    
        return h, s, l
    
    # 测试
    h,s,l = rgb2hsv(200, 221, 221)
    print('h=%f s=%f l=%f' % (h, s, l))
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    程序运行结果如下:
    这里写图片描述

    可以根据颜色代码表,判断我们的结果是否正确

    这里写图片描述

    附:

    1、 HSV转RGB的公式

    类似的,给定在HSV中 (h, s,
    v)值定义的一个颜色,带有如上的h,和分别表示饱和度和明度的s和v变化于0到1之间,在RGB空间中对应的 (r, g,
    b)三原色可以计算为(R,G,B变化于0到1之间):

    这里写图片描述

    对于每个颜色向量 (r, g, b),

    这里写图片描述

    (参考自维基百科)

    2、RGB转GRAY的公式

    请见:http://blog.csdn.net/xdrt81y/article/details/8289963

    总结:
    本文包括以下几个部分,
    1、RGB和HSV色彩空间的理解
    2、通过OpenCV实现了RGB到HSV的转换,包含一个使用滑动条的小例子
    3、根据RGB转HSL的公式,自己编程实现了RGB转HSL的程序。

    展开全文
  • RGB颜色空间与YCbCr颜色空间转换 RGB颜色空间与YCbCr颜色空间转换 1. 前言 2. RGB颜色空间转换YUV颜色空间描述 3. 代码实现 1. 前言 YUV是PAL和SECAM模拟彩色电视制式采用的颜色空间。YUV颜色空间以演播室...
  • RGB色彩空间转换到LAB色彩空间需要两步:RGB->XYZ, XYZ->LAB 。 第一步:sRGB转到XYZ //sR, sG and sB (Standard RGB) input range = 0 ÷ 255 //X, Y and Z output refer to a D65/2° standard illuminant. ...
  • OpenCV实现RGB颜色空间和HSI颜色空间的相互转换.pdf
  • RGB颜色空间与HSV颜色空间转换 RGB颜色空间与HSV颜色空间转换 1. 前言 2. RGB颜色空间与HSV颜色空间转换描述 3. 代码实现 1. 前言 HSV(Hue, Saturation, Value)颜色空间是一种面向视觉感知的视觉颜色模型,...
  • RGB色彩空间到HSI色采空间的转换的Matlab代码,可以直接运行。
  • RGB颜色空间转换LAB

    2016-12-27 21:11:51
    Matlab代码RGB颜色空间转换LAB
  • RGB颜色空间与CIE-XYZ颜色空间转换 RGB颜色空间与CIE-XYZ颜色空间转换 1. 前言 2. RGB颜色空间与CIE-XYZ颜色空间转换描述 3. 代码实现 1. 前言 国际照明委员会(CIE,International Commission on ...
  • RGB颜色空间与HSI颜色空间转换 RGB颜色空间与HSI颜色空间转换 1. 前言 2. RGB颜色空间与HSI颜色空间转换描述 3. 程序实现 1. 前言 HSI色彩空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或...
  • RGB颜色空间转换YCbCr颜色空间 RGB颜色空间转换YCbCr颜色空间 1. 前言 2. RGB颜色空间转换YCbCr颜色空间描述 3. 代码实现 1. 前言 在数字视频领域通常使用YCbCr颜色空间模型。YCrCb颜色模型通常使用亮度(Y)和...
  • 计算机图形学RGB颜色空间源代码,完美运行。
  • YIQ色彩空间通常被北美的电视系统所采用,属于NTSC(National Television Standards Committee)系统。这里Y不是指黄色,而是指颜色的明视度(Luminance),即亮度(Brightness)。其实Y就是图像的灰度值(Gray ...
  • 这是用VS 2005.net平台下,编写的RGB颜色空间转换成YUV颜色空间.严格的按颜色空间转换公式转换,并通过打点的方式打印在屏幕上。打印我是分 (奇、偶)两场打印的。
  • 本文先给出色调、饱和度和亮度的定义,然后将其量化,利用空间解析几何推导出RGB色彩空间与HSI色彩空间的转换关系,并给出实现这一转换的代码,同时给出OpenCV的标准转换算法。 二、色调、饱和度及亮度的定义 三、...
  • Adobe RGB色彩空间

    2019-05-14 09:57:14
    [编辑] 维基百科,自由的百科全书 (重定向自Adobe RGB) 跳到导航 跳到搜索 CIE 1931 xy chromaticity diagram showing the primaries of the Adobe RGB color space....Adobe RGB色彩空间是一种由Adobe...
  • 首先要理解HSV颜色空间RGB颜色空间的转换原理。查找相关资料后并不难理解。这里贴出一张最终计算公式。 上述代码就是围绕这个计算公式进行的。 1.首先计算出RGB的最大和最小通道值 2.计算delta差值 3.直接计算...
  • 使用matlab实现将rgb颜色空间转换到hsi颜色空间
  • 为提高水印抗印刷/扫描攻击的鲁棒性,比较了在CMYK与RGB颜色空间嵌入的水印经印刷/扫描后提取的效果。采用离散小波变换域傅里叶全息数字水印算法生成水印图像,经印刷/扫描后,可以提取到水印;然而,由于印刷/扫描过程中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,633
精华内容 27,053
关键字:

rgb颜色空间