1. 程式人生 > 其它 >openCV學習筆記6—顏色轉換,物體跟蹤,獲取閾值

openCV學習筆記6—顏色轉換,物體跟蹤,獲取閾值

技術標籤:OpenCV學習筆記opencvpython計算機視覺

openCV中的顏色轉換有100多種,但我們經常用到的只有兩種。BGR↔Gray 和 BGR↔HSV。
用到的函式cv2.cvtColor(input_image,flag)。flag就是要轉化的型別。

接下來重點介紹物體的跟蹤。在此之前需要知道幾點。

掩膜
含義:掩模是由0和1組成的一個二進位制影象。當在某一功能中應用掩模時,1值區域被處理,被遮蔽的0值區域不被包括在計算中。通過指定的資料值、資料範圍、有限或無限值、感興趣區和註釋檔案來定義影象掩模,也可以應用上述選項的任意組合作為輸入來建立掩模。
示例:下圖中的mask就是掩膜。

在這裡插入圖片描述

HSV
H(Hue):色調,取值範圍是 [0,179] ,它用來限制某一個顏色的彩色光譜範圍;

S(Saturation):飽和度,取值範圍是 [0,255] ,它用來限制顏色的深度,值越大顏色越深;

V(Value):色值,取值範圍是 [0,255] ,它用來限制畫素的亮度,值越大畫素越亮。

cv2.bitwise_and()
對二進位制資料進行“與”操作,即對影象(灰度影象或彩色影象均可)每個畫素值進行二進位制“與”操作,1&1=1,1&0=0,0&1=0,0&0=0。示例參照上圖。

uint8
uint8是專門用於儲存各種影象的(包括RGB,灰度影象等),範圍是從0–255.

想轉化為uint8型別的,可以點下邊的網址:https://blog.csdn.net/qq_39751320/article/details/104849194

追蹤藍色物體原始碼

import cv2
import numpy as np

cap=cv2.VideoCapture(0)

while (1):
    #獲取每一幀的圖片
    ret,frame=cap.read()
    #轉化為HSV
    hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

    #設定藍色的閾值
    lower_blue=np.array([110,50,50])
    upper_blue=
np.array([130,255,255]) #根據閾值構建掩膜 mask=cv2.inRange(hsv,lower_blue,upper_blue) #對原影象和掩膜進行位運算 #src1:第一個影象(合併的第一個物件)src2:第二個影象(合併的第二個物件)mask:理解為要合併的規則。 res=cv2.bitwise_and(frame,frame,mask=mask) #顯示影象 cv2.imshow('frame',frame) cv2.imshow('mask',mask) cv2.imshow('res',res) k=cv2.waitKey(5)&0xFF #按esc鍵退出 if k==27: break cv2.destroyAllWindows()

獲取閾值
追蹤物體的關鍵就是獲取相關的閾值。接下來給出將RGB轉化為HSV的方法。

import cv2
import numpy as np
# 這裡的三層括號應該分別對應於 cvArray,cvMat,IplImage
white=np.uint8([[[255,255,255]]])
white_hsv=cv2.cvtColor(white,cv2.COLOR_BGR2HSV)
print(white_hsv)

可以分別用 [H-100,100,100] 和 [H+100,255,255] 做上下閾值。

下邊是一些常見顏色的H值範圍。

-30<=h<30, 紅色

30<=h<90, 黃色

90<=h<150,綠色

150<=h<210,青色

210<=h<270,藍色

270<=h<330,品紅色