使用 Python 和 OpenCV 進行影像顏色識別


識別影像中的顏色是計算機視覺和影像處理中常見的一項任務。它具有廣泛的應用,例如目標檢測、影像分割和影像檢索。在本文中,我們將瞭解如何使用 Python 和 OpenCV 來確定影像中的顏色。

Open CV is a popular computer vision library written in C/C++ with bindings for Python, OpenCV provides easy ways of manipulating color spaces. Open CV is open source and gives various algorithms useful in image processing.

在識別影像中的顏色之前,讓我們先了解一些常見的影像表示方法。在數字影像中,顏色通常使用 RGB(紅、綠、藍)顏色模型表示,在此模型中,每種顏色都表示為三種基本顏色紅、綠和藍的組合,並基於某個值。這些值的範圍從 0 到 255,其中 255 表示最大貢獻,0 表示最小貢獻。

使用 OpenCV 進行顏色識別

顏色直方圖是使用特定顏色中存在的畫素數量來表示影像中顏色分佈的一種表示方法,並將其呈現在直方圖中。透過研究該直方圖,我們可以瞭解影像的主導顏色。

  • 我們可以將顏色分類到不同的顏色類別,並建立顏色直方圖以透過它分析顏色

  • 要建立此直方圖,我們需要將影像從 RGB 顏色空間轉換為其他顏色空間,例如 HSV 顏色空間,它代表色相、飽和度和值顏色空間。

  • 將影像轉換為 HSV 顏色空間後,我們將建立給定影像的色相分量的直方圖。

  • 色相分量將表示影像的實際顏色資訊,而飽和度和值分量將分別表示顏色的亮度和強度。

使用 OpenCV 進行顏色識別

讓我們看看如何使用 Python 和 OpenCV 在影像中執行顏色識別。

步驟 1:匯入所需的庫

要將影像在 BGR 和 RGB 顏色空間之間進行轉換,我們需要匯入所需的庫。我們將使用以下庫 -

  • OpenCV - 用於讀取和操作影像。

  • Matplotlib - 用於顯示影像。

import cv2
import numpy as np

步驟 2:載入影像並將其轉換為 HSV 顏色空間

現在我們將載入影像並將其轉換為 HSV 顏色空間。

img = cv2.imread('image.jpg')
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

步驟 3:定義顏色範圍

我們需要定義我們要檢測的顏色範圍的下限和上限。我們可以使用 OpenCV 的 inRange() 函式來提取顏色範圍內的畫素。

lower_range = (0, 50, 50) # lower range of red color in HSV
upper_range = (10, 255, 255) # upper range of red color in HSV
mask = cv2.inRange(hsv_image, lower_range, upper_range)

步驟 4:將掩碼應用於影像

我們可以將我們在上一步中獲得的掩碼應用於原始影像,以提取顏色範圍內的畫素。

color_image = cv2.bitwise_and(image, image, mask=mask)

步驟 5:顯示彩色影像

最後,我們可以顯示僅包含我們指定顏色範圍內的畫素的彩色影像。

# Display the color image
cv2.imshow('Color Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例

import cv2
import numpy as np
img = cv2.imread('image_red.jpg')
cv2.imshow('Original Image', img)
cv2.waitKey(0)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# lower range of red color in HSV
lower_range = (0, 50, 50)

# upper range of red color in HSV
upper_range = (150, 255, 255)
mask = cv2.inRange(hsv_img, lower_range, upper_range)
color_image = cv2.bitwise_and(img, img, mask=mask)

# Display the color of the image
cv2.imshow('Coloured Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出

原始影像 -

彩色影像 -

檢測不同的顏色

在上面的程式碼中,我們已經識別了紅色顏色範圍內的畫素。我們可以修改下限和上限來檢測不同的顏色。例如,如果您需要檢測綠色,我們可以如下設定下限和上限 -

import cv2
import numpy as np
img = cv2.imread('image1.jpg')
cv2.imshow('Original Image', img)
cv2.waitKey(0)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_range = (12, 25, 25) # lower range of green color in HSV
upper_range = (86, 255, 255) # upper range of green color in HSV
mask = cv2.inRange(hsv_img, lower_range, upper_range)
color_image = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('Coloured Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出

原始影像 -

彩色影像 -

結論

在本文中,我們討論了顏色識別。顏色識別在計算機視覺和影像處理中很常見。我們討論瞭如何使用 Python 語言和 Python 的 OpenCV 庫來識別影像中的顏色。我們瞭解了不同型別的顏色模型,例如 RGB 和 HSV。我們瞭解瞭如何建立顏色直方圖並將其用於識別影像中的主導顏色。我們還了解了如何顯示這些主導顏色。

更新於: 2023年4月20日

14K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.