使用 OpenCV 和 Python 檢測特定顏色(此處為藍色)?


對於許多人來說,影像處理可能看起來像是一項可怕而艱鉅的任務,但它並不像許多人想象的那麼難。在本教程中,我們將使用 Python 在 OpenCV 中進行基本的顏色檢測。

計算機上的顏色是如何工作的?

我們透過顏色空間或顏色模型在計算機上表示顏色,這些模型基本上將顏色範圍描述為數字元組。

我們不逐個討論每種顏色,而是討論我們最常用的顏色空間,即 RGB(紅、綠、藍)和 HSV(色調、飽和度、明度)。

RGB 將顏色描述為三個分量的元組。每個分量可以取 0 到 255 之間的值,其中元組 (0, 0, 0) 表示黑色,(255, 255, 255) 表示白色。例如,如果我們要在螢幕上顯示一個純藍色的畫素,則 R 值將為 0,G 值將為 0,B 值將為 255。

以下是 RGB 顏色的一些示例

顏色RGB 值
紅色255, 0, 0
橙色255, 128, 0
粉色255, 153, 255

使用 HSV,畫素也由 3 個引數表示,但它們分別是色調、飽和度和明度。但是,與 RGB 不同,HSV 不使用原色來表示畫素。相反,它使用色調,即畫素的顏色或陰影。

飽和度是顏色的強度,其中飽和度為 0 表示 0,飽和度為 255 表示最大強度。明度將告訴顏色有多亮或多暗。

檢測正確的顏色

因此,讓我們首先下載我們將要使用的影像,

現在我們已經獲得了顏色影像,我們可以開始有趣的部分了。只需開啟您喜歡的 Python 文字編輯器或 IDE,然後開始吧。

import cv2
import numpy as np
import imutils
img = cv2.imread('color2.jpg')

在上面的程式碼行中,前兩行處理所有匯入。在第三行中,我正在匯入 imutils 模組,它有助於調整影像大小並查詢顏色範圍。在第 4 行中,我們打開了影像。

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

現在我們將影像轉換為 HSV 影像,因為 HSV 有助於區分顏色和強度。

lower_range = np.array([110,50,50])
upper_range = np.array([130,255,255])

現在我們定義了要檢測的藍色的上限和下限。要找到這些限制,我們可以使用 imutils 庫中的範圍檢測器指令碼。我們將這些值放入 NumPy 陣列中。

mask = cv2.inRange(hsv, lower_range, upper_range)

在這裡,我們實際上正在使用指定的藍色建立一個掩碼。掩碼只是表示影像的特定部分。在這種情況下,我們正在遍歷 HSV 影像,並檢查顏色是否在較低範圍和較高範圍之間。匹配的區域將設定為掩碼變數的影像。

cv2.imshow('image', img)
cv2.imshow('mask', mask)

while(True):
   k = cv2.waitKey(5) & 0xFF
   if k == 27:
      break

cv2.destroyAllWindows()

最後,我們可以並排顯示原始影像和掩碼影像以檢視差異。如果您想了解程式碼中 0xFF 的含義,請閱讀此內容。然後,程式碼等待使用者按下“Esc”鍵,這將退出並銷燬所有視窗以進行清理。

最終程式

import cv2
import numpy as np
import imutils

img = cv2.imread('color2.jpg')

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_range = np.array([110,50,50])
upper_range = np.array([130,255,255])

mask = cv2.inRange(hsv, lower_range, upper_range)

cv2.imshow('image', img)
cv2.imshow('mask', mask)

while(True):
   k = cv2.waitKey(5) & 0xFF
   if k == 27:
      break

cv2.destroyAllWindows()

輸出

在上面,我們看到掩碼中有一些黑色斑點,那就是噪聲。

更新於: 2019年7月30日

2K+ 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.