顏色空間及顏色空間轉換

2021-10-05 11:16:48 字數 1575 閱讀 8233

1.1 顏色空間介紹

rgb 顏色空間是大家最熟悉的顏色空間,即三基色空間,任何一種顏色都可以由該三種 顏色混合而成。然而一般對顏色空間的影象進行有效處理都是在 hsv 空間進行的,hsv(色 調 hue,飽和度 saturation,亮度 value)是根據顏色的直觀特性建立的一種顏色空間, 也稱六角 錐體模型。

為什麼會選擇 hsv 空間而不是 rgb 空間? 對於影象而言,識別相應的顏色在 rgb 空間、 hsv 空間或者其它顏色空間都是可行的。之所以選擇 hsv,是因為 h 代表的色調基本上可以 確定某種顏色,再結合飽和度和亮度資訊判斷大於某乙個閾值。而 rgb 由三個分量構成, 需要判斷每種分量的貢獻比例。即 hsv 空間的識別的範圍更廣,更方便。

1.2 hsv到rgb轉換

1.3 rgb到灰度

1.3.1 平均法

平均法將r,g和b的平均值作為灰度值。

灰度=(r + g + b)/ 3

從理論上講,公式是100%正確的。但是在編寫**時,您可能會遇到uint8溢位錯誤 - r,g和b的總和大於255.為避免異常,應分別計算r,g和b。

灰度= r / 3 + g / 3 + b / 3

平均法很簡單,但效果不如預期。原因是人眼對rgb的反應不同。眼睛對綠光最敏感,對紅光不敏感,對藍光最不敏感。因此,三種顏色在分布上應具有不同的權重。這使我們得到加權方法。

1.3.2 加權法

也稱為光度法,根據其波長稱重紅色,綠色和藍色。改進後的公式如下:

灰度 = 0.299r + 0.587g + 0.114b

1.4 二值化:灰度到黑/白轉換

二值化將灰度影象轉換為黑/白影象。該轉換在檢測斑點方面很有用,並進一步降低了計算複雜度。關鍵任務是找到合適的閾值。主要有兩種方法:

區域性閾值  - 逐個畫素地計算閾值

全域性閾值處理 - 為所有畫素計算一次閾值

1.4.1 區域性閾值法利用區域性閾值方法,在每個畫素處計算閾值,其取決於一些區域性統計,例如平均值,範圍和畫素鄰域的方差。將影象分成幾個子塊,並分析每個塊中灰度值的分布。

1.4.2 全域性閾值方法

全域性閾值處理方法利用影象直方圖。影象直方圖是一種統計圖,在x軸上具有灰度值,在y軸上具有每個灰度的畫素數。

顏色空間轉換

話不多說,說明anything include include using namespace std using namespace cv int main int argc,char argv printf n 釋放相應的影象記憶體空間 cvreleaseimage src cvreleasei...

顏色空間轉換

img1 cv2.cvtcolor img,cv2.color bgr2gray 將原圖的彩色bgr格式轉換為灰度gray格式影象 img2 cv2.cvtcolor img,cv2.color bgr2hsv 將原圖的彩色bgr格式轉換為彩色hsv格式影象 cv2.namedwindow mcgr...

顏色空間轉換

1.轉成灰度圖 img gray cv2.cvtcolor img,cv2.color bgr2gray cv2.imshow img img cv2.imshow gray img gray cv2.waitkey 0 2.獲取所有的轉換模式 flags i for i in dir cv2 if...