顏色空間及其OpenCV實(shí)現(xiàn)是怎么樣的,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了仲巴免費(fèi)建站歡迎大家使用!
導(dǎo)讀對(duì)圖像的顏色空間做了一個(gè)概念性的介紹,并通過代碼的方式可視化了每種顏色空間的每個(gè)通道所表示的意義。
文章內(nèi)容包括:
顏色是一種連續(xù)的現(xiàn)象,它意味著有無數(shù)種顏色。但是,人類的眼睛和感知能力是有限的。所以,為了識(shí)別這些顏色,我們需要一種媒介或這些顏色的表示,這種顏色的表示被稱為色彩空間。在技術(shù)術(shù)語中,一個(gè)顏色模型或顏色空間是一個(gè)特定的3-D坐標(biāo)系統(tǒng)以及該系統(tǒng)中的一個(gè)子空間,其中每一種顏色都由一個(gè)單點(diǎn)表示。
目前主要有五種類型的顏色模型。但是,我將只寫一些常見的(RGB、HSV和HSL)。
RGB顏色空間是三維坐標(biāo)系中紅、綠、藍(lán)坐標(biāo)所表示的著名顏色空間之一。在更專業(yè)的術(shù)語中,RGB將顏色描述為由三個(gè)部分組成的元組。每個(gè)部分都可以取0到255之間的值,其中元組(0,0,0)表示黑色,元組(255,255,255)表示白色。元組的第0、第1和第2個(gè)部分分別表示紅、綠、藍(lán)的分量。
這里我們導(dǎo)入了必要的庫,cv2用于顏色空間轉(zhuǎn)換,NumPy用于數(shù)組操作,Matplotlib用于顯示圖像,os用于訪問圖像目錄,tqdm用于顯示加載欄。
hsl_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS) #### CONVERTING BGR COLOR SPACE INTO HSL COLOR SPACE ####
hsl_img_1 = hsl_img.copy()
hsl_img_2 = hsl_img.copy()
hsl_img_3 = hsl_img.copy()
hsl_img_1[:,:,1] = 0 #### HUE --> ZERO ####
hsl_img_1[:,:,2] = 0
hsl_img_2[:,:,0] = 0 #### SATURATION --> ZERO ####
hsl_img_2[:,:,2] = 0
hsl_img_3[:,:,0] = 0 #### LIGHTNESS --> ZERO ####
hsl_img_3[:,:,1] = 0
設(shè)置兩個(gè)空列表Z和X,分別用于存儲(chǔ)帶有各自圖像的標(biāo)簽,然后指定圖像大小和路徑目錄。在這之后,我定義了兩個(gè)函數(shù),用于返回flower類型(assign_lable)和訪問每個(gè)圖像、讀取和調(diào)整其大小(make_train_data)。
Z,X=[],[]
IMG_SIZE=150
FLOWER_SUNFLOWER_DIR='../input/flowers-recognition/flowers/flowers/sunflower'
def assign_label(img,flower_type):
return flower_type
def make_train_data(flower_type,DIR):
for img in tqdm(os.listdir(DIR)):
label=assign_label(img,flower_type)
path = os.path.join(DIR,img)
img = cv2.imread(path,cv2.IMREAD_COLOR)
img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))#Resizing the image
加載圖像,然后在OpenCV以BGR格式讀取圖像時(shí)將BGR顏色空間轉(zhuǎn)換為RGB顏色空間,但Maplotlib使用RGB格式來顯示圖像。這就是為什么我們需要轉(zhuǎn)換顏色空間后,讀取圖像為RGB。
然后對(duì)固定圖像進(jìn)行三份拷貝,并將每份拷貝的任何雙色通道設(shè)為零,分別用于訪問紅、綠、藍(lán)通道。如果你讓第0個(gè)顏色通道都是0那么你只會(huì)得到藍(lán)色通道。
make_train_data('Sunflower',FLOWER_SUNFLOWER_DIR) #####Loading Sunflower Data
fix_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2RGB) ###########CONVERTING BGR COLOR SPACE INTO RGB COLOR SPACE #########
new_img_1 = fix_img.copy()
new_img_2 = fix_img.copy()
new_img_3 = fix_img.copy()
new_img_1[:,:,0] = 0 # making R channel zero ####For BLUE channel#####
new_img_1[:,:,1] = 0 #making G channel zero
new_img_2[:,:,1] = 0####For RED color Channel####
new_img_2[:,:,2] = 0
new_img_3[:,:,0] = 0###For GREEN Channel####
new_img_3[:,:,2] = 0
顯示圖像:
f, axes = plt.subplots(1,3, figsize = (15,15))
list = [new_img_1,new_img_2,new_img_3]
i = 0
for ax in axes:
ax.imshow(list[i])
i+=1
HSL的一般含義是色調(diào)、飽和度和明度。你可以將HSL以圓柱體的形式可視化,如圖2(a)所示。圍繞圓柱體的是不同的顏色,比如綠色、黃色、紅色等等(我們真正想要的顏色)。飽和度是指顏色的多少,而明度是指顏色有多暗或多亮。正如你所看到的,圓柱體的頂部全是白色,底部全是黑色。
使用OpenCV函數(shù)**cvtColor()**將BGR顏色空間轉(zhuǎn)換為HSL顏色空間,在這里我們需要傳遞圖像,以及從哪個(gè)顏色空間到哪個(gè)顏色空間我們想要改變圖像。然后再復(fù)制并使兩個(gè)顏色通道為零,以便分別顯示每個(gè)顏色通道。
hsl_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS) #### CONVERTING BGR COLOR SPACE INTO HSL COLOR SPACE ####
hsl_img_1 = hsl_img.copy()
hsl_img_2 = hsl_img.copy()
hsl_img_3 = hsl_img.copy()
hsl_img_1[:,:,1] = 0 #### HUE --> ZERO ####
hsl_img_1[:,:,2] = 0
hsl_img_2[:,:,0] = 0 #### SATURATION --> ZERO ####
hsl_img_2[:,:,2] = 0
hsl_img_3[:,:,0] = 0 #### LIGHTNESS --> ZERO ####
hsl_img_3[:,:,1] = 0
現(xiàn)在顯示三個(gè)不同的顏色通道→
f, axes = plt.subplots(1,3, figsize = (15,15))
list = [hsl_img_1,hsl_img_2,hsl_img_3]
i = 0
for ax in axes:
ax.imshow(list[i])
i+=1
HSV這個(gè)名字來自于顏色模型的三個(gè)坐標(biāo),即色相、飽和度和值。它也是一個(gè)圓柱形的顏色模型,圓柱體的半徑表示飽和度,垂直軸表示值,角度表示色調(diào)。對(duì)于觀察者,色調(diào)是占主導(dǎo)地位的,飽和度是混合到色調(diào)中的白光的數(shù)量,value是chrome的強(qiáng)度,value較低顏色變得更加類似于黑色,value越高,顏色變得更加像顏色本身。通過改變這些參數(shù),我們可以生成不同的顏色。
使用cvtColor()函數(shù)將色彩空間轉(zhuǎn)換為HSV色彩空間。然后再復(fù)制并使兩個(gè)通道置為零,以便分別顯示每個(gè)通道。
hsv_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2HSV)
hsv_img_1 = hsv_img.copy()
hsv_img_2 = hsv_img.copy()
hsv_img_3 = hsv_img.copy()
hsv_img_1[:,:,1] = 0#HUE --> ZERO
hsv_img_1[:,:,2] = 0
hsv_img_2[:,:,0] = 0#SATURATION --> ZERO
hsv_img_2[:,:,2] = 0
hsv_img_3[:,:,0] = 0#VALUE --> ZERO
hsv_img_3[:,:,1] = 0
單獨(dú)顯示每個(gè)顏色通道:
看完上述內(nèi)容,你們掌握顏色空間及其OpenCV實(shí)現(xiàn)是怎么樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!