opencv 人工選擇顏色進行刪選背景

因爲有時候你在使用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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章