OpenCV 例程200篇 總目錄
【youcans 的 OpenCV 例程300篇】209. HSV 顏色空間的彩色圖像分割
5.1 HSV 顏色空間的彩色圖像分割
HSV 模型是針對用戶觀感的一種顏色模型。
HSV 顏色空間的各通道分別表示色調(diào)(Hue)、飽和度(Saturation)和明度(Value),可以直觀地表達色彩的明暗、色調(diào)及鮮艷程度。
HSV 顏色空間可以用一個圓錐空間模型來描述。圓錐的頂點處 V=0,H 和 S 無定義,代表黑色;圓錐的頂面中心處V=max,S=0,H 無定義,代表白色。
當 S=1, V=1 時,H 所代表的任何顏色被稱為純色;當 S=0 時,飽和度為 0,顏色最淺,最淺被描述為灰色,灰色的亮度由 V 決定,此時 H 無意義;當 V=0 時,顏色最暗,最暗被描述為黑色,此時 H 和 S 均無意義,無論如何取值均為黑色。
色調(diào)是色彩的基本屬性,表示不同的顏色 ,可以用于描述和識別某種顏色。例如,綠色在 HSV 空間中的范圍是 H=35~77,而在 RGB 空間很難用表達式描述。因此常用 HSV 色彩空間進行某種顏色的識別和不同顏色的對比。
HSV 模型在對指定顏色分割時非常有效。用 H 和 S 分量表示顏色距離,顏色距離指代表兩種顏色之間的數(shù)值差異。對于不同的彩色區(qū)域,混合 H 與 S 變量,劃定閾值,就可以進行簡單的分割。
函數(shù)原型
函數(shù) inRange () 可以實現(xiàn)按顏色區(qū)域 [lowerb,upperb] 對圖像進行二值分割 。
cv.inRange(src, lowerb, upperb[, dst]) → dst
函數(shù) inRange() 檢查數(shù)組元素是否在設(shè)定區(qū)間內(nèi),通常用于在 HSV 空間檢查設(shè)定的顏色區(qū)域范圍。如果圖像的某個像素值在 [lowerb,upperb] 之間,則輸出像素值置 255,否則置 0。
參數(shù)說明:
- src:輸入圖像,nparray 數(shù)組,允許單通道或多通道圖像
- lowerb:下邊界閾值,標量(src為單通道)或數(shù)組(src為多通道)
- upperb:上邊界閾值,標量(src為單通道)或數(shù)組(src為多通道)
- dst:輸出圖像,單通道的二值圖像,大小與 src 相同,深度為 CV_8U
注意事項:
- 輸入圖像可以是單通道的灰度圖像,也可以是多通道的彩色圖像。
- 不論輸入圖像是單通道還是多通道圖像,輸出圖像都是單通道二值圖像,相當于輸入圖像的黑白遮罩 mask。
- 輸入圖像是單通道的灰度圖像時,lower、upper 為標量;輸入圖像是多通道的彩色圖像時,lower, upper 為數(shù)組,數(shù)組長度與通道數(shù)相同,分別表示各通道的邊界閾值。
- 輸入圖像為多通道時,僅當像素各通道的值都在 [lowerb(i),upperb(i)] 之間時輸出才為 255:
KaTeX parse error: Undefined control sequence: \and at position 39: …I_0) \lt u_0] \?a?n?d? ?[l_1 \lt src(I_…
顏色閾值:
色調(diào)表示不同的顏色 ,各種顏色具有特定的色調(diào)值。
OpenCV 中 HSV 顏色空間的范圍是:H [0,180],S [0,255],V [0,255]。
常用顏色的色調(diào)值范圍,也即邊界閾值,如下表所示。
例程 14.17:HSI 顏色空間圖像分割
# 14.17 HSI 顏色空間圖像分割
# 在HSV空間對綠屏色彩區(qū)域進行閾值處理,生成遮罩進行摳圖
img = cv.imread("../images/lady983Green.png", flags=1) # 讀取彩色圖像
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) # 將圖片轉(zhuǎn)換到 HSV 色彩空間
# 使用 cv.inrange 函數(shù)在 HSV 空間檢查設(shè)定的顏色區(qū)域范圍,轉(zhuǎn)換為二值圖像,生成遮罩
lowerColor = np.array([35, 43, 46]) # (下限: 綠色33/43/46)
upperColor = np.array([77, 255, 255]) # (上限: 綠色77/255/255)
binary = cv.inRange(hsv, lowerColor, upperColor) # 生成二值遮罩,指定背景顏色區(qū)域白色
binaryInv = cv.bitwise_not(binary) # 生成逆遮罩,前景區(qū)域白色開窗,背景區(qū)域黑色
matting = cv.bitwise_and(img, img, mask=binaryInv) # 生成摳圖圖像 (前景保留,背景黑色)
# 將背景顏色更換為紅色: 修改逆遮罩 (摳圖以外區(qū)域黑色)
imgReplace = img.copy()
imgReplace[binaryInv==0] = [0,0,255] # 黑色背景區(qū)域(0/0/0) 修改為紅色 (BGR:0/0/255)
plt.figure(figsize=(9, 6))
plt.subplot(221),plt.title("origin"), plt.axis('off')
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
plt.subplot(222), plt.title("binary mask"), plt.axis('off')
plt.imshow(binary, cmap='gray')
plt.subplot(223), plt.title("invert mask"), plt.axis('off')
plt.imshow(binaryInv, cmap='gray')
plt.subplot(224), plt.title("matting"), plt.axis('off')
plt.imshow(cv.cvtColor(matting, cv.COLOR_BGR2RGB))
plt.tight_layout()
plt.show()
【本節(jié)完】
版權(quán)聲明:
參考文獻: Use the Photoshop Levels adjustment (adobe.com)
youcans@xupt 原創(chuàng)作品,轉(zhuǎn)載必須標注原文鏈接:(https://blog.csdn.net/youcans/article/details/125389684)
Copyright 2022 youcans, XUPT
Crated:2022-6-20
歡迎關(guān)注 『youcans 的 OpenCV 例程 200 篇』 系列,持續(xù)更新中
歡迎關(guān)注 『youcans 的 OpenCV學習課』 系列,持續(xù)更新中文章來源:http://www.zghlxwxcb.cn/news/detail-442357.html
201. 圖像的顏色空間轉(zhuǎn)換
202. 查表快速替換(cv.LUT)
203. 偽彩色圖像處理
204. 圖像的色彩風格濾鏡
205. 調(diào)節(jié)色彩平衡/飽和度/明度
206. Photoshop 色階調(diào)整算法
207. Photoshop 色階自動調(diào)整算法
208. Photoshop 對比度自動調(diào)整算法
209. HSV 顏色空間的彩色圖像分割文章來源地址http://www.zghlxwxcb.cn/news/detail-442357.html
到了這里,關(guān)于【OpenCV 例程300篇】209. HSV 顏色空間的彩色圖像分割的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!