因爲有時候你在使用HSV刪選背景是標準的顏色有時候不是很理想,所以你可以根據在標準的基礎上,進行自我的刪選。
這是一張標準的顏色表。
如果我們想把白雲和藍天去掉,就是如果使用標準顏色處理是這樣的效果
我們可以通過參數調整變爲這個效果
代碼如下
import cv2
import numpy as np
def nothing(x):
pass
def show(img, time = 10, str = "haigen"):
cv2.namedWindow(str,cv2.WINDOW_NORMAL)
cv2.imshow(str,img)
cv2.waitKey(time)
img = cv2.imread("C:/Test/top.jpg")
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.namedWindow("res",cv2.WINDOW_NORMAL)
#建立三個滑動條
cv2.createTrackbar('lh','res',0,180, nothing)
cv2.createTrackbar('ls','res',0,255, nothing)
cv2.createTrackbar('lv','res',0,255, nothing)
cv2.createTrackbar('rh','res',0,180, nothing)
cv2.createTrackbar('rs','res',0,255, nothing)
cv2.createTrackbar('rv','res',0,255, nothing)
while True:
show(img)
lh = cv2.getTrackbarPos('lh',"res")
ls = cv2.getTrackbarPos('ls', "res")
lv = cv2.getTrackbarPos('lv', "res")
rh = cv2.getTrackbarPos('rh', "res")
rs = cv2.getTrackbarPos('rs', "res")
rv = cv2.getTrackbarPos('rv', "res")
lower = np.array([lh,ls,lv])
upper = np.array([rh,rs,rv])
bianry = cv2.inRange(hsv,lower,upper)
res = cv2.bitwise_and(img,img,mask = bianry)
show(bianry,str="binary")
show(res,10,"res1")
if cv2.waitKey(10) == ord('q'):
break
cv2.destroyAllWindows()