簡體   English   中英

openCV 中的 HSV 顏色范圍

[英]HSV colour range in openCV

我編寫了一個使用軌跡欄的程序,以找出合適的 HSV 值(范圍)以從圖像中分割出白線。

很長一段時間,這似乎是最好的鏡頭: 在此處輸入圖像描述

但它仍然不是很准確,它遺漏了大塊的線......

又折騰了一陣子,我才意識到:

在此處輸入圖像描述

這是非常准確的:除了黑色和白色區域交換的事實。

有什么辦法可以反轉這種配色方案來交換黑白區域? 如果沒有,我究竟能做些什么才能不遺漏第一張圖片中的大塊線條……我已經嘗試了各種 HSV 組合,這似乎是我能得到的最接近的組合。

代碼:

import cv2 as cv
import numpy as np




def nothing(x):
    pass


img= cv.imread("ti2.jpeg")



cv.namedWindow("image")  #create a window that will contain the trackbars for HSV values

cv.createTrackbar('HMin','image',0,179,nothing) 
cv.createTrackbar('SMin','image',0,255,nothing)
cv.createTrackbar('VMin','image',0,255,nothing)
cv.createTrackbar('HMax','image',0,179,nothing)
cv.createTrackbar('SMax','image',0,255,nothing)
cv.createTrackbar('VMax','image',0,255,nothing)


cv.setTrackbarPos('HMax', 'image', 179) #setting default trackbar pos for max HSV values at max
cv.setTrackbarPos('SMax', 'image', 255)
cv.setTrackbarPos('VMax', 'image', 255)

while True:

    hMin = cv.getTrackbarPos('HMin','image') #get the current slider position
    sMin = cv.getTrackbarPos('SMin','image')
    vMin = cv.getTrackbarPos('VMin','image')

    hMax = cv.getTrackbarPos('HMax','image')
    sMax = cv.getTrackbarPos('SMax','image')
    vMax = cv.getTrackbarPos('VMax','image')
    
    hsv=cv.cvtColor(img, cv.COLOR_BGR2HSV)
    
    lower=np.array([hMin,sMin,vMin])
    upper=np.array([hMax,sMax,vMax])

    mask=cv.inRange(hsv,lower,upper)
    


    #result=cv.bitwise_and(frame,frame,mask=mask)
    
    cv.imshow("img",img)
    cv.imshow("mask",mask)
    #cv.imshow("result",result)
    
    k=cv.waitKey(1)
    
    if k==27 :
        break
       
cv.destroyAllWindows()

測試圖像:

在此處輸入圖像描述

反轉蒙版

mask = 255-mask # if mask is a uint8 which ranges 0 to 255
mask = 1-mask # if mask is a bool which is either 0 or 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM