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

閱讀時間約 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 選項,程式將返回原始圖片,以防止未定義行為的發生。



119會員
201內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉