C 版本OpenCv教程 十 顏色模型與轉換

2021-10-12 16:37:35 字數 2534 閱讀 1139

前面對於rgb顏色模型已經有所介紹,該模型的命名方式是採用三種顏色的英文首字母組成,分別是紅色(red)、綠色(green)和藍色(blue)。雖然該顏色模型的命名方式是紅色在前,但是在opencv中卻是相反的順序,第乙個通道時藍色(b)分量,第二個通道時綠色(g)分量,第三個通道時紅色(r)分量。根據儲存順序的不同,opencv 4中提供了這種順序的反序格式,用於儲存第乙個通道是紅色分量的影象,但是這兩種格式的影象的顏色空間是相同的,顏色空間如圖3-1所示。三個通道對於顏色描述的範圍是相同的,因此rgb顏色模型的空間構成是乙個立方體。在rgb顏色模型中,所有的顏色都是由這三種顏色通過不同比例的混合得到,如果三種顏色分量都為0,則表示為黑色,如果三種顏色的分量相同且都為最大值,則表示為白色。每個通道都表示某一種顏色由0到1的過程,不同位數的影象表示將這個顏色變化過程細分成不同的層級,例如8u3c格式的影象每個通道將這個過程量化成256個等級,分別由0到255表示。在這個模型的基礎上增加第四個通道即為rgba模型,第四個通道表示顏色的透明度,當沒有透明度需求的時候,rgba模型就會退化成rgb模型。

hsv是色度(hue)、飽和度(saturation)和亮度(value)的簡寫,通過名字也可以看出來該模型通過這三個特性對顏色進行描述。色度是色彩的基本屬性,就是平時常說的顏色,例如紅色,藍色等;飽和度是指顏色的純度,飽和度越高色彩越純越豔,飽和度越低色彩則逐漸地變灰變暗,飽和度的取值範圍是由0到100%;亮度是顏色的明亮程度,其取值範圍由0到計算機中允許的最大值。由於色度、飽和度和亮度的取值範圍不同,因此其顏色空間模型用錐形表示,其形狀如圖3-2所示。相比於rgb模型三個顏色分量與最終顏色聯絡不直觀的缺點,hsv模型更加符合人類感知顏色的方式:顏色、深淺以及亮暗。

lab顏色模型彌補了rgb模型的不足,是一種裝置無關的顏色模型,是一種基於生理特徵的顏色模型。在模型中l表示亮度(luminosity),a和b是兩個顏色通道,兩者的取值區間都是由-128到+127,其中a通道數值由小到大對應的顏色是從綠色變成紅色,b通道數值由小到大對應的顏色是由藍色變成黃色。其構成的顏色空間是乙個球形,形式如圖3-3所示。

gray模型並不是乙個彩色模型,他是乙個灰度影象的模型,其命名使用的是英文單詞gray的全字母大寫。灰度影象只有單通道,灰度值根據影象位數不同由0到最大依次表示由黑到白,例如8uc1格式中,由黑到白被量化成了256個等級,通過0-255表示,其中255表示白色。彩色影象具有顏色豐富、資訊含量大的特性,但是灰度圖在影象處理中依然具有一定的優勢。例如,灰度影象具有相同尺寸相同壓縮格式所佔容量小,易於採集,便於傳輸等優點。常用的rgb模型轉成灰度圖的方式如式中所示。

針對影象不同顏色模型之間的相互轉換,opencv 4提供了cvtcolor()函式用於實現轉換功能,該函式的函式原型如下所示:

void cv::cvtcolor(inputarray src,

outputarray dst,

int code,

int dstcn = 0)

#include

#include

#include

#include

#include "opencv/highgui.h"

using namespace std;

using namespace cv;

int main(int argc,char** ar**)

mat dst;

resize(img,dst,size(img.cols*0.5,img.rows*0.5))

; mat gray,hsv,yuv,lab,img32;

dst.convertto(img32,cv_32f,1.0/255)

;//將cv_8u型別轉換成cv_32f型別

cvtcolor(img32,hsv,color_bgr2hsv)

; cvtcolor(img32,yuv,color_bgr2yuv)

; cvtcolor(img32,lab,color_bgr2lab)

; cvtcolor(img32,gray,color_bgr2gray)

; imshow(

"原圖",dst)

C 版本OpenCv教程 三十三 雙邊濾波

前面我們介紹的濾波方法都會影象照成模糊,使得邊緣資訊變弱或者消失,因此需要一種能夠對影象邊緣資訊進行保留的濾波演算法,雙邊濾波就是經典的常用的能夠保留影象邊緣資訊的濾波演算法之一。雙邊濾波是一種綜合考慮濾波器內影象空域資訊和濾波器內影象畫素灰度值相似性的濾波演算法,可以實現在保留區域資訊的基礎上實現...

C 版本OpenCv教程 二十九 方框濾波

方框濾波是均值濾波的一般形式,在均值濾波中,將濾波器中所有的畫素值求和後的平均值作為濾波後結果,方框濾波也是求濾波器內所有畫素值的之和,但是方框濾波可以選擇不進行歸一化,就是將所有畫素值的和作為濾波結果,而不是所有畫素值的平均值。opencv 4中提供了boxfilter 函式實現方框濾波,該函式的...

OpenCV學習記錄(C 版本)

影象的載入 imread 函式 mat imread const string filename,int flag 1 其中flag 1代表讀入rgb彩色影象,1表示讀取原始影象,0表示讀取灰度圖 todo 影象的顯示 imshow 函式 改變視窗大小 imshow時改變視窗大小,screensho...