檢測視頻中特定顏色

簡要描述

這章是檢測視頻中的特定顏色,代碼中檢測的是藍色的。經嘗試可用。

步驟

● 設置“藍色”HSV範圍
● BGR轉HSV
● 捕獲攝像頭視頻
● 獲取藍色部分mask
● 圖像按位與操作
● 顯示藍色部分圖像

知識點

HSV(Hue , Saturation , Value):色調,飽和度,明度
色度H:用角度度量,取值範圍爲0~360,紅色開始按逆時針方向計算,紅色爲0度,綠色爲120度,藍色爲240度
飽和度S:接近光譜色的程度,顏色可以看成是光譜色與白色混合結果,光譜色佔的比例愈大,顏色接近光譜色的程度越高,顏色飽和度就越高。光譜色中白色成分爲0,飽和度達到最高,取值範圍0%~100%,值越大,顏色越飽和
明度V:表示顏色明亮的程度,對於光源色,明度值與發光體的光亮度有關;對於物體色,與物體的透射比有關,取值 範圍爲0%(黑)~100%(白)
RGB面向硬件,HSV面向用戶
在Opencv中 ,H色度取值範圍是[0,179] ,S飽和度的取值範圍是[0,255] ,V明度的取值範圍是[0,255]
拿opencv的HSV值與其他軟件的HSV值進行對比時,要歸一化

主要函數

BGR轉HSV:cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

獲取藍色部分mask:mask = cv2.inRange(hsv,lower_blue,upper_blue)

圖像按位與操作:res = cv2.bitwise_and(frame,frame,mask=mask)

代碼

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

#畫出藍色的範圍
lower_blue = np.array([78,43,46])
upper_blue = np.array([110,255,255])

while(1):
    ret,frame = cap.read()
    cv2.imshow("capture",frame)

    #轉換成hsv
    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    cv2.imshow("HSV",hsv)

    ''''' 
            cv2.inRange(src , lowerb , upperb[,dst]) 
            作用:更改函數對某個單通道中的元素檢查其值是否在範圍中 
            src:輸入數組,lowerb:包含低邊界的數組,upperb:包含高邊界的數組,dst:輸出數組 
            如果src(I)符合範圍,則dst(I)被設置爲255,也就是說dst返回的是非黑即白的圖像,而且符合要求 
             的部分是白色的 
            '''
    # 構建物體掩膜(黑白部分),注意這裏要使用hsv
    mask = cv2.inRange(hsv,lower_blue,upper_blue)
    cv2.imshow("MASK",mask)

    #對原圖像和掩膜進行位運算
    res = cv2.bitwise_and(frame,frame,mask=mask)
    cv2.imshow("result",res)

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

cap.release()
cv2.destroyAllWindows()

參考:
【1】http://blog.csdn.net/huanglu_thu13/article/details/52346578#15-python-opencv-檢測特定顏色
【2】http://blog.csdn.net/qingyuanluofeng/article/details/51582137

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章