使用 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()輸出

在上面,我們看到掩碼中有一些黑色斑點,那就是噪聲。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP