1. 程式人生 > >在python中使用opencv將RGB影象轉換為HSV及YCrCb影象(附程式碼)

在python中使用opencv將RGB影象轉換為HSV及YCrCb影象(附程式碼)

【時間】2018.11.01

【題目】在python中使用opencv將RGB影象轉換為HSV及YCrCb影象(附程式碼)

目錄

概述

一、程式碼實現

二、執行結果

三、關於HSV及YCrCb的一點補充

3.1HSV顏色空間

3.2 YCRCBA顏色空間


概述

本文主要講述瞭如何在python中使用opencv將RGB影象轉換為HSV及YCrCb影象,主要使用了cv2庫中的cv2.cvtColor()函式,將RGB影象(在opencv中設計BGR影象)轉換為HSV影象用到了引數cv2.COLOR_BGR2HSV,而轉換為YCrCb影象用到了引數cv2.COLOR_BGR2YCrCb或者cv2.COLOR_BGR2YCR_CB。

 

一、程式碼實現

功能:此程式碼用以讀取一個資料夾中的所有RGB圖片並將它們轉換為HSV及YCrCb影象,並分別儲存

import cv2

import os

image_path ='F:\\test\\image1\\'

save_path_hsv = 'F:\\test\\image1\\'

save_path_ycrcb = 'F:\\test\\image1\\'



def brg2hsv_ycrcb(image_path,save_path_hsv,save_path_ycrcb):

    filenames = os.listdir(image_path)

    for filename in filenames:

        examname = filename[:-4]

        type = filename.split('.')[-1]

        img = cv2.imread(image_path + '\\'+ filename)

        img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

        img_ycrcb = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)



        save_hsv = save_path_hsv + examname + '_HSV'+'.'+type

        save_ycrcb = save_path_ycrcb + examname + '_YCrCb' + '.' + type

        cv2.imwrite(save_hsv,img_hsv)

        cv2.imwrite(save_ycrcb, img_ycrcb)

if __name__ == '__main__':

  brg2hsv_ycrcb(image_path, save_path_hsv, save_path_ycrcb)

二、執行結果

 

三、關於HSV及YCrCb的一點補充

3.1HSV顏色空間

HSV是一種將RGB色彩空間中的點在倒圓錐體中的表示方法。HSV即色相(Hue)、飽和度(Saturation)、明度(Value),又稱HSB(B即Brightness)。色相是色彩的基本屬性,就是平常說的顏色的名稱,如紅色、黃色等。飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數值。明度(V),取0-max(計算機中HSV取值範圍和儲存的長度有關)。HSV顏色空間可以用一個圓錐空間模型來描述。圓錐的頂點處,V=0,H和S無定義,代表黑色。圓錐的頂面中心處V=max,S=0,H無定義,代表白色。

3.2 YCRCBA顏色空間

   YCrCb即YUV,主要用於優化彩色視訊訊號的傳輸,使其向後相容老式黑白電視。與RGB視訊訊號傳輸相比,它最大的優點在於只需佔用極少的頻寬(RGB要求三個獨立的視訊訊號同時傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定畫素的顏色。“亮度”是透過RGB輸入訊號來建立的,方法是將RGB訊號的特定部分疊加到一起。“色度”則定義了顏色的兩個方面─色調與飽和度,分別用Cr和Cb來表示。其中,Cr反映了RGB輸入訊號紅色部分與RGB訊號亮度值之間的差異。而Cb反映的是RGB輸入訊號藍色部分與RGB訊號亮度值之間的差異。