OpenCV-Python-1--圖片的基本知識

色彩模型(Color Model)

色彩模型是一種抽象的數學模型,通過一組數字來描述顏色。當站在不同的角度對顏色建模時就得到不同的數學模型。

  • 機器視角
    • RGB(Red、Green、Blue),used with color CRT monitors
    • YIQ,broadcast TV color system
    • CMY(Cyan(青色), Magenta(品紅), Yellow),color printing
    • CMYK(Cyan, Magenta, Yellow,Black),color printing
    • IRODORI,six-primary-color projection system
  • 用戶視角:
    • HSV(Hue, Saturation, Value)
    • HSB(Hue, Saturation, Brightness),和HSV是一樣的,只是叫法不同
    • HSL (Hue, Saturation,Lightness)
    • The Munsell system
    • CIE Lab

顏色分類

自然界物體的顏色有兩種:光源色(light source color)和表面色(surface color)。

  • 光源色(可以自己發光的物體)——紅色R、綠色G、藍色B——加法混色原理;

  • 表面色(自己不能發光,只能反射光)——品紅M、黃色Y、青色C——減法混色原理。

RGB模型

RGB是一種加法混色模型,它描述那些由不同顏色的混合形成新顏色的情形,顏色越加越亮。生活中也有直觀的感受,例如室內燈開得越多,室內就越亮。因爲亮度是累加的,所以是加法混色。

在這裏插入圖片描述
RGB是通過空間笛卡爾座標系來建模的,如下圖所示:每種顏色由空間中的一個座標來表示。每個座標有三個分量,每個分量共有256種取值,所以RGB一共有 256256256=16777216256*256*256=16777216 種顏色。注意:OpenCV中分量的順序爲BGR,即 (B,G,R)

在這裏插入圖片描述
計算機中的顯示模式:

  • 24比特模式:圖片中的每個像素使用三個8位無符號整數(0到255)表示紅色、綠色和藍色的強度。
  • 16比特模式:16比特模式分配給每種原色各爲5比特,其中綠色爲6比特,因爲人眼對綠色分辨的色調更精確。但某些情況下每種原色各佔5比特,餘下的1比特不使用。
  • 32比特模式:實際就是24比特模式,餘下的8比特不分配到像素中,這種模式是爲了提高數據輸送的速度。同樣在一些特殊情況下,如DirectX、OpenGL等環境,餘下的8比特用來表示象素的透明度(Alpha)。

CMY模型

CMY模型是一種減法混色模型,該模型解釋了塗料染料墨水天然色素混合物產生的顏色,每個顏色會減去(即吸收)某些波長的光並反射其它光。例如顏料不發光,看到的顏色其實是沒被吸收而被反射出來的光的顏色。所以顏料吸收的顏色就是我們看到顏料顏色的補色。因爲看到的顏色是白光減去看到顏色的補色,所以是減法模型。CMY模型主要應用在印刷行業,理論上只要CMY等比例混合就能得到黑色,但是因爲目前製造工藝水平的限制,製造出來的油墨純度都不夠高,CMY相加的結果實際只是一種暗紅色。又因爲在印刷業中黑色的使用頻率非常高,所以往往還會加入黑色(black)油墨,這就是CMYK色彩混合模式的由來。

青色C(紅色R的補色) 是因爲吸收光中的紅光R,剩下的綠光G和藍光B被反射出來,形成青色C
青色C= 白色- 紅色R = 綠色G+ 藍色B

品紅M(綠色G的補色) 是因爲吸收光中的綠光G,剩下的紅光R和藍光B被反射出來,形成品紅M
品紅M= 白色 - 綠色G =紅色R+ 藍色B

黃色Y(藍色B的補色) 是因爲吸收光中的藍光B,剩下的紅光R和綠光G被反射出來,形成黃色Y
黃色Y= 白色 - 藍色B = 紅色R + 綠色G

在這裏插入圖片描述

HSB(HSV)模型

HSB(HSV)模型是站在人的角度對顏色建模,我們對色彩的認識往往是:

  1. 是什麼顏色?

    由色相(色彩相貌)H決定,決定了是什麼顏色?是紅色?綠色?還是什麼顏色?

  2. 顏色鮮豔不鮮豔?

    由飽和度S,即顏色的濃度決定。

  3. 顏色是亮還是暗?

    由明度 B 決定,可以理解爲照在顏色上光線的強度,光線越強,顏色越亮,反之,越暗。

在這裏插入圖片描述
Photoshop中拾色器的HSB如下圖所示:
在這裏插入圖片描述

灰度圖

灰度圖是指圖片中每個像素 R、G、B 三個分量的取值相同。因爲三個分量的取值相同,所以一共有256種灰度。當採用不同的算法時,得到的灰度圖不同。例如,可以取三個分量的最大值、最小值、平均值等作爲灰度:

Example:假設某個像素的取值爲:(60,120,180)
取最小值作爲分量:(60,60,60)
取最大值作爲分量:(180,180,180)
取平均值作爲分量:(60+120+180)/3=120-->(120,120,120)

OpenCV中RGB轉灰度圖(cvtColor(src, bwsrc, cv::COLOR_RGB2GRAY)的算法爲:

Gray=0.299*R+0.587*G+0.114*B

通道

下面通過例子來理解通道的含義。注意:不同顯示器顯示效果有差異,所以當你使用拾色器拾取顏色時,可能和下面不一樣。

原圖片:
在這裏插入圖片描述

小圓圈的RGB顏色分別爲:
(60,0,0)、(120,0,0)、(180,0,0)、(240,0,0)
(0,60,0)、(0,120,0)、(0,180,0)、(0,240,0)
(0,0,60)、(0,0,120)、(0,0,180)、(0,0,240)
(60,60,0)、(120,120,0)、(180,180,0)、(240,240,0)
(60,0,60)、(120,0,120)、(180,0,120)、(240,0,120)
(0,60,60)、(0,120,120)、(0,180,180)、(0,180,180)
字體的RGB顏色爲:(80,160,240)

紅色通道:
在這裏插入圖片描述

小圓圈的RGB顏色分別爲:
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
字體的RGB顏色爲:(80,80,80)

綠色通道:
在這裏插入圖片描述

小圓圈的RGB顏色分別爲:
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
字體的RGB顏色爲:(160,160,160)

藍色通道:
在這裏插入圖片描述

小圓圈的RGB顏色分別爲:
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
字體的RGB顏色爲:(240,240,240)

結論: RGB顏色模型是由空間笛卡爾直角座標系建模的,有三個軸 R、G、B,每個軸代表一個通道。由上面實驗結果可以看出,紅色通道、綠色通道、藍色通道都是一張灰度圖。RGB通道灰度圖生成策略爲:

紅色通道:(R,G,B)-->(R,R,R)以紅色分量去填充其他分量
綠色通道:(R,G,B)-->(G,G,G)以綠色分量去填充其他分量
藍色通道:(R,G,B)-->(B,B,B)以藍色分量去填充其他分量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章