OpenCV 檢測顏色
本教程將討論在 Python 中使用 OpenCV 的 inRange()
函式檢測影象中的顏色。
在 Python 中使用 OpenCV 的 inRange()
函式檢測影象上的顏色
我們可以使用 OpenCV 的 inRange()
函式檢測和提取影象中存在的顏色。有時,出於某種原因,我們想從影象中刪除或提取顏色。
我們可以使用 OpenCV 的 inRange()
函式來建立顏色掩碼,或者換句話說,我們可以使用該顏色的範圍來檢測顏色。顏色以 RGB 三元組值格式儲存在彩色影象中。
要建立它的蒙版,我們必須使用該顏色的明暗版本的 RGB 三元組值。例如,在 BRG 影象中,如果我們要提取紅色,我們可以使用 (0,0,50) 表示淺紅色,使用 (255,50,50) 表示深紅色來建立紅色蒙版.
我們可以傳遞影象和上下 BRG 值來建立蒙版。
例如,讓我們讀取包含一些不同顏色的圓圈的影象,並建立一個紅色蒙版和一個綠色蒙版。請參閱下面的程式碼。
import cv2
img = cv2.imread("download.png")
# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))
# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))
cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.waitKey(0)
輸出:
我們可以將這兩個蒙版與原始影象進行比較,以瞭解它們是否包含正確的顏色。我們可以看到掩碼一在紅色之上,而掩碼二在藍色之上。
inRange()
函式建立一個與原始影象相似的新二值影象。如你所見,蒙版影象中只有白色和黑色兩種顏色。
inRange()
函式將顏色的值設定為 1,如果顏色存在於給定的顏色範圍內,則設定為白色,如果顏色不存在於指定的顏色範圍內,則設定為 0。上圖採用 BRG 色標。
這就是我們在 inRange()
函式中使用 BRG 值的原因,但我們也可以將影象轉換為其他色標,例如 HSV,在這種情況下,我們將使用 HSV 標度值來建立蒙版。現在讓我們從影象中提取紅色和藍色。
要提取這兩種顏色,我們必須使用 OpenCV 的 bitwise_or()
函式將兩個蒙版組合起來以建立一個蒙版。之後,我們可以使用 OpenCV 的 bitwise_and()
函式從影象中提取顏色,使用影象作為第一個和第二個引數,掩碼作為第三個引數。
請參閱下面的程式碼。
import cv2
img = cv2.imread("download.png")
# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))
# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))
# final mask
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.imshow("mask of both colors", mask)
cv2.imshow("target colors extracted", target)
cv2.waitKey(0)
輸出:
從給定的影象中成功提取了紅色和藍色,如上一張影象所示。要將一種顏色空間轉換為另一種顏色空間,我們可以使用 OpenCV 的 cvtColor()
函式。
如果我們有一張帶有 HSV 顏色空間的影象,我們必須使用 HSV 值來建立蒙版。在 HSV 中,顏色具有定義顏色的三個值 Hue、Saturation 和 Value。
相關文章 - Python OpenCV
- OpenCV sobel() 函式
- Python 中 OpenCV 的 GUI 特性
- 在 Python 中使用 OpenCV 的 HSV 顏色空間
- 在 Python 中使用 OpenCV 建立二維碼掃描器
- OpenCV 中的模糊濾鏡
- 使用 OpenCV 進行物件跟蹤