很多時候,當圖像中存在色彩時,我們用用RGB圖像處理得不到想要的結果時,就可以把圖像轉化成HSV圖像,再加以處理,這樣處理起來獲取方便了很多。當然,在特定的環境中,我們不知道HSV的範圍,這個時候可以測試一下圖像中想要凸顯的物體的HSV的範圍,再設定相應的閾值範圍。
點擊圖像觀察圖像HSV值代碼:
import cv2
import numpy as np
from matplotlib import pyplot as plt
image=cv2.imread('./src/q5.png')
HSV=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
def getpos(event,x,y,flags,param):
if event==cv2.EVENT_LBUTTONDOWN:
print(HSV[y,x])
#th2=cv2.adaptiveThreshold(imagegray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)
cv2.imshow("imageHSV",HSV)
cv2.imshow('image',image)
cv2.setMouseCallback("imageHSV",getpos)
cv2.waitKey(0)
#print (image(10,10,10))
圖像及輸出的HSV值:
H:圖像的色彩/色度;S:圖像的飽和度;V:圖像的亮度
當我們確定了圖像的HSV範圍時,就可以利用HSV對採集的視頻做一個hsv處理:
代碼:
import cv2
import numpy as np
cap=cv2.VideoCapture(1)
#image=cv2.imread("./src/7.png")
while(1):
ret,image=cap.read()
hsv=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
lower=np.array([100,60,100])
upper=np.array([120,120,180])
mask=cv2.inRange(hsv,lower,upper)
res=cv2.bitwise_and(image,image,mask=mask)
cv2.imshow('image',image)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
#cv2.waitKey(0)
k=cv2.waitKey(5)&0xff
if k==27:
break
cv2.destroyAllWindows()
這是對藍色物體的hsv處理: