[OpenCV][Python]提取出特定的色彩通道(RGB,HSV)

更新於 2024/08/22閱讀時間約 2 分鐘

在 OpenCV 中,將圖片從 BGR 色彩空間轉換為灰階圖像時常用cv2.COLOR_BGR2GRAY ,此函數使用了特定的權重來計算灰階值。這些權重是基於人眼對不同顏色的敏感度進行調整的。


BGR2GRAY權重

Gray=0.299×R+0.587×G+0.114×B


這些權重反映了人眼對不同顏色的敏感度,綠色對人眼的影響最大,因此權重最高,而藍色的影響最小,因此權重最低。

相反的在AVI檢測,如果特徵是紅色或者是藍色,都使用這個方式來轉換灰階,這樣顏色的特徵性就會降低

本文將介紹使用其他方法來提取特定的色彩通道


在後面會使用到HSV來切割色彩通道,故先說明,這樣看結果圖比較容易理解。

HSV 色彩通道的組成:

Hue(色相):

表示顏色的色調,它用角度來表示,範圍通常為 0 到 360 度。這些角度對應於顏色在色環中的位置:

色相可以用來區分不同的顏色。

    • 0° 是紅色
    • 60° 是黃色
    • 120° 是綠色
    • 180° 是青色
    • 240° 是藍色
    • 300° 是洋紅色
  • 在 OpenCV 中,H (色相)值的範圍是0到180 而不是 0 到 360

Saturation(飽和度):

Saturation 表示顏色的鮮艷程度或純度,範圍通常為 0 到 100%。飽和度為 0% 表示灰色(完全沒有顏色),而飽和度為 100% 表示純色(顏色最鮮豔)。

Value(明度):
Value 表示顏色的亮度或光強度,範圍通常為 0 到 100%。明度為 0% 時表示黑色(完全沒有光),而明度為 100% 時表示最亮的顏色。

  • 在 OpenCV 中,S(飽和度)和 V(明度)的範圍是 0 到 255

結果圖

灰階值數值越高越白,越低則越黑,全白= 255,全黑 =0

raw-image

在RGB通道中,黃金獵犬與背景顏色中,黃色占比較高,黃色主要為R跟G混合而成,所以在R與G通道原先黃色的位置就會比較白。

raw-image

H為色相,黃色算數值比較低的,故灰階值較低就會比較暗一點

S為飽和度,圖像中色彩較鮮艷的地方,轉換灰階值就會比較亮一點

V為明亮度,

raw-image

取出特定的色彩通道的函式

def __Color_split_img(img: np.ndarray, Color_split_choose: str):
'''
Changing Colorspace for BGR -> Gray,R,G,B,H,S,V
'''
if len(img.shape) == 2:
return img

if Color_split_choose == 'Gray':
split_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
elif Color_split_choose in ('R','G','B'):
B, G, R, = cv2.split(img)
if Color_split_choose == 'R':
split_img = R
elif Color_split_choose == 'G':
split_img = G
elif Color_split_choose == 'B':
split_img = B
elif Color_split_choose in ('H','S','V'):
H, S, V, = cv2.split(img)
if Color_split_choose == 'H':
split_img = H
elif Color_split_choose == 'S':
split_img = S
elif Color_split_choose == 'V':
split_img = V
else:
return img
return split_img
  • HSV 色彩空間轉換: 在分割 H、S、V 通道之前,必須先將圖片從 BGR 色彩空間轉換為 HSV 色彩空間。這是透過 cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 來完成的。
  • 灰度圖像檢查: 如果圖片已經是灰度圖像(即圖片只有兩個維度),則直接返回這個灰度圖像,不做其他處理。
  • 錯誤處理: 在 else 分支中,如果用戶輸入了一個無效的 Color_split_choose 選項,程式將返回原始圖片,以防止未定義行為的發生。



avatar-img
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
cv2.countNonZero 是 OpenCV 中的一個函數,用來計算二值圖像(或單通道圖像)中非零像素的數量。這個函數對於圖像處理中的許多操作非常有用,例如計算某個區域內的白色像素數量,從而幫助我們了解圖像的內容或進行進一步的分析。 使用範例 假設您有一個二值圖像,其中白色像素
局部二值化(Local Thresholding)是一種影像處理技術,用來根據局部區域的像素值動態地將影像轉換為二值影像。這在處理光照不均勻的影像時特別有用。 與常見的兩種二值化(Otsu's與固定閥值)方法做比較。 實現局部二值化的範例: import cv2 import numpy
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
上一篇提到利用cv2.inRangex,建立遮罩來過濾出紅球。這次我們稍微更動一下程式碼,將紅球變顏色。 [OpenCV][Python]利用cv2.inRange搭配cv2.bitwise_and過濾紅球 結果圖 將紅球改變顏色成藍球
用小畫家隨意畫三個圈分別用紅藍綠,我們利用cv2.inRange與搭配cv2.bitwise_and,將紅球過濾出來吧。 程式範例 因為OpenCV中cv2.imread讀取圖檔預設讀取是為[B,G,R]的格式,所以設置紅色範圍要注意設定在R的範圍內。
cv2.countNonZero 是 OpenCV 中的一個函數,用來計算二值圖像(或單通道圖像)中非零像素的數量。這個函數對於圖像處理中的許多操作非常有用,例如計算某個區域內的白色像素數量,從而幫助我們了解圖像的內容或進行進一步的分析。 使用範例 假設您有一個二值圖像,其中白色像素
局部二值化(Local Thresholding)是一種影像處理技術,用來根據局部區域的像素值動態地將影像轉換為二值影像。這在處理光照不均勻的影像時特別有用。 與常見的兩種二值化(Otsu's與固定閥值)方法做比較。 實現局部二值化的範例: import cv2 import numpy
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
上一篇提到利用cv2.inRangex,建立遮罩來過濾出紅球。這次我們稍微更動一下程式碼,將紅球變顏色。 [OpenCV][Python]利用cv2.inRange搭配cv2.bitwise_and過濾紅球 結果圖 將紅球改變顏色成藍球
用小畫家隨意畫三個圈分別用紅藍綠,我們利用cv2.inRange與搭配cv2.bitwise_and,將紅球過濾出來吧。 程式範例 因為OpenCV中cv2.imread讀取圖檔預設讀取是為[B,G,R]的格式,所以設置紅色範圍要注意設定在R的範圍內。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
這篇文章主要介紹了繪圖軟體中的色彩模式,包括RGB和CMYK的概念和用法。對於網路上使用和印刷的影像處理有很好的指導意義。
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
色差檢測在許多應用中非常重要,如印刷、織物、塗料等。色差的測量通常使用 CIEDE2000 色差公式來計算兩個顏色之間的差異。 本文將檢測以下織物圖,分析出兩者的色差 程式範例 流程: 先利用K-Means分群的方式,分割出主要顏色,在用delta_e_cie2000來檢測色差 主要安裝
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和影像處理庫,它提供了豐富的功能和工具,可用於開發各種視覺應用程式。 OpenCV最初是用C++編寫的,但它也提供了Python、Java等多種程式語言的接口,方便不同語言的開發者使用。
Thumbnail
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
這篇文章主要介紹了繪圖軟體中的色彩模式,包括RGB和CMYK的概念和用法。對於網路上使用和印刷的影像處理有很好的指導意義。
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
色差檢測在許多應用中非常重要,如印刷、織物、塗料等。色差的測量通常使用 CIEDE2000 色差公式來計算兩個顏色之間的差異。 本文將檢測以下織物圖,分析出兩者的色差 程式範例 流程: 先利用K-Means分群的方式,分割出主要顏色,在用delta_e_cie2000來檢測色差 主要安裝
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和影像處理庫,它提供了豐富的功能和工具,可用於開發各種視覺應用程式。 OpenCV最初是用C++編寫的,但它也提供了Python、Java等多種程式語言的接口,方便不同語言的開發者使用。
Thumbnail
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉