對圖像的顏色空間做了一個概念性的介紹,并通過代碼的方式可視化了每種顏色空間的每個通道所表示的意義。
文章內容包括:
什么是顏色空間?
顏色空間有哪些類別?
如何在OpenCV中實現?
什么是顏色空間?
顏色是一種連續的現象,它意味著有無數種顏色。但是,人類的眼睛和感知能力是有限的。所以,為了識別這些顏色,我們需要一種媒介或這些顏色的表示,這種顏色的表示被稱為色彩空間。在技術術語中,一個顏色模型或顏色空間是一個特定的3-D坐標系統以及該系統中的一個子空間,其中每一種顏色都由一個單點表示。
有哪些顏色空間的類型?
目前主要有五種類型的顏色模型。但是,我將只寫一些常見的(RGB、HSV和HSL)。
RGB(Red Green Blue)
HSL(Hue Saturation Lightness)
HSV(Hue Saturation Value)
YUV(Luminance, blue–luminance, red–luminance)
CMYK(Cyan, Magenta, Yellow, Key)
RGB顏色空間:
RGB顏色空間是三維坐標系中紅、綠、藍坐標所表示的著名顏色空間之一。在更專業的術語中,RGB將顏色描述為由三個部分組成的元組。每個部分都可以取0到255之間的值,其中元組(0,0,0)表示黑色,元組(255,255,255)表示白色。元組的第0、第1和第2個部分分別表示紅、綠、藍的分量。
RGB顏色空間的Python實現:
這里我們導入了必要的庫,cv2用于顏色空間轉換,NumPy用于數組操作,Matplotlib用于顯示圖像,os用于訪問圖像目錄,tqdm用于顯示加載欄。
hsl_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)####CONVERTINGBGRCOLORSPACEINTOHSLCOLORSPACE####
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
設置兩個空列表Z和X,分別用于存儲帶有各自圖像的標簽,然后指定圖像大小和路徑目錄。在這之后,我定義了兩個函數,用于返回flower類型(assign_lable)和訪問每個圖像、讀取和調整其大小(make_train_data)。
Z,X=[],[]
IMG_SIZE=150
FLOWER_SUNFLOWER_DIR='../input/flowers-recognition/flowers/flowers/sunflower'
defassign_label(img,flower_type):
returnflower_type
defmake_train_data(flower_type,DIR):
forimgintqdm(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))#Resizingtheimage
加載圖像,然后在OpenCV以BGR格式讀取圖像時將BGR顏色空間轉換為RGB顏色空間,但Maplotlib使用RGB格式來顯示圖像。這就是為什么我們需要轉換顏色空間后,讀取圖像為RGB。
然后對固定圖像進行三份拷貝,并將每份拷貝的任何雙色通道設為零,分別用于訪問紅、綠、藍通道。如果你讓第0個顏色通道都是0那么你只會得到藍色通道。
make_train_data('Sunflower',FLOWER_SUNFLOWER_DIR)#####LoadingSunflowerData
fix_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2RGB)###########CONVERTINGBGRCOLORSPACEINTORGBCOLORSPACE#########
new_img_1=fix_img.copy()
new_img_2=fix_img.copy()
new_img_3=fix_img.copy()
new_img_1[:,:,0]=0#makingRchannelzero####ForBLUEchannel#####
new_img_1[:,:,1]=0#makingGchannelzero
new_img_2[:,:,1]=0####ForREDcolorChannel####
new_img_2[:,:,2]=0
new_img_3[:,:,0]=0###ForGREENChannel####
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
foraxinaxes:
ax.imshow(list[i])
i+=1
HSL顏色空間:
HSL的一般含義是色調、飽和度和明度。你可以將HSL以圓柱體的形式可視化,如圖2(a)所示。圍繞圓柱體的是不同的顏色,比如綠色、黃色、紅色等等(我們真正想要的顏色)。飽和度是指顏色的多少,而明度是指顏色有多暗或多亮。正如你所看到的,圓柱體的頂部全是白色,底部全是黑色。
圖2:HSL顏色空間
HSL顏色空間的Python實現:
使用OpenCV函數**cvtColor()**將BGR顏色空間轉換為HSL顏色空間,在這里我們需要傳遞圖像,以及從哪個顏色空間到哪個顏色空間我們想要改變圖像。然后再復制并使兩個顏色通道為零,以便分別顯示每個顏色通道。
hsl_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)####CONVERTINGBGRCOLORSPACEINTOHSLCOLORSPACE####
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
現在顯示三個不同的顏色通道→
f,axes=plt.subplots(1,3,figsize=(15,15))
list=[hsl_img_1,hsl_img_2,hsl_img_3]
i=0
foraxinaxes:
ax.imshow(list[i])
i+=1
HSV顏色空間:
HSV這個名字來自于顏色模型的三個坐標,即色相、飽和度和值。它也是一個圓柱形的顏色模型,圓柱體的半徑表示飽和度,垂直軸表示值,角度表示色調。對于觀察者,色調是占主導地位的,飽和度是混合到色調中的白光的數量,value是chrome的強度,value較低顏色變得更加類似于黑色,value越高,顏色變得更加像顏色本身。通過改變這些參數,我們可以生成不同的顏色。
圖3:HSV顏色空間
HSV顏色空間的Python實現:
使用cvtColor()函數將色彩空間轉換為HSV色彩空間。然后再復制并使兩個通道置為零,以便分別顯示每個通道。
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
單獨顯示每個顏色通道:
原文標題:解析丨圖像處理基礎:顏色空間及其OpenCV實現
文章出處:【微信公眾號:通信信號處理研究所】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
圖像處理
+關注
關注
27文章
1292瀏覽量
56759
原文標題:解析丨圖像處理基礎:顏色空間及其OpenCV實現
文章出處:【微信號:tyutcsplab,微信公眾號:智能感知與物聯網技術研究所】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論