Outil De Débogage HSV

OpenCV lit souvent des images dans l’espace colorimétrique HSV, et l’utilisation d’un extracteur de couleur sur l’image ne donne souvent pas de résultats précis ; si l’image contient plusieurs cibles de couleurs différentes, le travail d’extraction de couleur est également très compliqué.

Pour faciliter l’utilisation, j’ai donc développé un petit outil. Cet outil peut importer une image et permettre de définir les limites supérieures et inférieures des trois valeurs HSV en déplaçant 6 barres de progression, et afficher les résultats en temps réel sur les couches de masque et de résultat, atténuant ainsi les problèmes mentionnés ci-dessus.

image-20240229161212053

Il suffit de déplacer les barres de progression pour localiser rapidement les plages HSV de plusieurs cibles, voire affiner jusqu’à une valeur précise. Le code est le suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import cv2  
import numpy as np  

path = r'D:\PlayGround\CVP\return.png'  # Emplacement de l'image, il suffit de modifier cet attribut lors de l'utilisation
# Fonction de rappel de la barre de défilement, obtient la valeur à la position de la barre de défilement  
def empty(a):  
    h_min = cv2.getTrackbarPos("Hue Min", "TrackBars")  
    h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")  
    s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")  
    s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")  
    v_min = cv2.getTrackbarPos("Val Min", "TrackBars")  
    v_max = cv2.getTrackbarPos("Val Max", "TrackBars")  
    print(h_min, h_max, s_min, s_max, v_min, v_max)  
    return h_min, h_max, s_min, s_max, v_min, v_max  
    
# Crée une fenêtre pour placer 6 barres de défilement  
cv2.namedWindow("TrackBars")  
cv2.resizeWindow("TrackBars", 640, 240)  
cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty)  
cv2.createTrackbar("Hue Max", "TrackBars", 19, 179, empty)  
cv2.createTrackbar("Sat Min", "TrackBars", 110, 255, empty)  
cv2.createTrackbar("Sat Max", "TrackBars", 240, 255, empty)  
cv2.createTrackbar("Val Min", "TrackBars", 153, 255, empty)  
cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty)  
  
while True:  
    img = cv2.imread(path)  
    imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  
    # Appelle la fonction de rappel pour obtenir les valeurs de la barre de défilement  
    h_min, h_max, s_min, s_max, v_min, v_max = empty(0)  
    lower = np.array([h_min, s_min, v_min])  
    upper = np.array([h_max, s_max, v_max])  
    # Obtient le masque dans la plage de couleur spécifiée  
    mask = cv2.inRange(imgHSV, lower, upper)  
    # Effectue une opération AND bit à bit sur l'image originale, la zone du masque est conservée  
    imgResult = cv2.bitwise_and(img, img, mask=mask)  
    cv2.imshow("Mask", mask)  
    cv2.imshow("Result", imgResult)  
    cv2.waitKey(1)
Buy me a coffee~
Tim AlipayAlipay
Tim PayPalPayPal
Tim WeChat PayWeChat Pay
0%