(ง •_•)ง[Python3 OpenCV4]4.顏色轉換

RGB

RGB是從顏色發光的原理來設計定的,通俗點說它的顏色混合方式就好像有紅、綠、藍三盞燈,當它們的光相互疊合的時候,色彩相混,而亮度卻等於兩者亮度之總和,越混合亮度越高,即加法混合。
在這裏插入圖片描述

HSV

HSV是一種比較直觀的顏色模型,所以在許多圖像編輯工具中應用比較廣泛,這個模型中顏色的參數分別是:色調(H, Hue),飽和度(S,Saturation),明度(V, Value)。

  • 色調H

用角度度量,取值範圍爲0°~360°,從紅色開始按逆時針方向計算,紅色爲0°,綠色爲120°,藍色爲240°。它們的補色是:黃色爲60°,青色爲180°,品紅爲300°;

  • 飽和度S

    飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結果。其中光譜色所佔的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而豔。光譜色的白光成分爲0,飽和度達到最高。通常取值範圍爲0%~100%,值越大,顏色越飽和。

  • 明度V

明度表示顏色明亮的程度,對於光源色,明度值與發光體的光亮度有關;對於物體色,此值和物體的透射比或反射比有關。通常取值範圍爲0%(黑)到100%(白)。

在這裏插入圖片描述

HSL

HSL是一種將RGB色彩模型中的點在圓柱座標系中的表示法。這兩種表示法試圖做到比基於笛卡爾座標系的幾何結構RGB更加直觀。
HSL即色相、飽和度、亮度(英語:Hue, Saturation, Lightness)。
色相(H)是色彩的基本屬性,就是平常所說的顏色名稱,如紅色、黃色等。
飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數值。
明度(V),亮度(L),取0-100%。

在這裏插入圖片描述

接口文檔

顏色空間轉換

COLOR_BGR2GRAY表示BGR→Gray

顏色轉換其實是數學運算,如灰度化最常用的是:gray=R0.299+G0.587+B*0.114。

import cv2
img = cv2.imread('lena.jpg')
# 轉換爲灰度圖
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow('img', img)
cv2.imshow('gray', img_gray)
cv2.waitKey(0)

這個代碼可以顯示所有的顏色轉換方法

flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
 print(flags)

視頻中特定顏色物體追蹤

HSV是一個常用於顏色識別的模型,相比BGR更易區分顏色,轉換模式用COLOR_BGR2HSV表示

OpenCV中色調H範圍爲[0,179],飽和度S是[0,255],明度V是[0,255]。雖然H的理論數值是0°~360°,但8位>圖像像素點的最大值是255,所以OpenCV中除以了2,某些軟件可能使用不同的尺度表示,所以同其他軟件>混用時,記得歸一化。

import numpy as np
import cv2


#BGR->HSV值
blue = np.uint8([[[255, 0, 0]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
print(hsv_blue)  # [[[120 255 255]]]




capture = cv2.VideoCapture("wzry.mp4")

# 藍色的範圍,不同光照條件下不一樣,可靈活調整
lower_blue = np.array([100, 110, 110])
upper_blue = np.array([130, 255, 255])

while(True):
    # 1.捕獲視頻中的一幀
    ret, frame = capture.read()
    if False == ret:
        break

    # 2.從BGR轉換到HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 3.inRange():介於lower/upper之間的爲白色,其餘黑色
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # 4.只保留原圖中的藍色部分
    res = cv2.bitwise_and(frame, frame, mask=mask)

    cv2.imshow('frame', frame)
    cv2.imshow('mask', mask)
    cv2.imshow('res', res)

    if cv2.waitKey(1) == ord('q'):
        break

小結

  • cv2.cvtColor()函數用來進行顏色空間轉換,常用BGR↔Gray,BGR↔HSV。
  • HSV顏色模型常用於顏色識別。要想知道某種顏色在HSV下的值,可以將它的BGR值用cvtColor()轉換得到。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章