HSVデバッグツール

OpenCVはしばしばHSV色空間の画像を読み込み、画像上で色抽出器を使用しても正確な結果を得ることができないことがあります。画像に複数の色の異なるターゲットがある場合、色抽出作業も非常に面倒です。

使用を簡単にするために、私は小さなツールを開発しました。このツールは画像をインポートし、6つの進捗バーのドラッグ操作を通じてHSVの3つの値の上下限を設定し、結果をマスクと結果レイヤーにリアルタイムで表示することで、上記の問題を緩和します。

image-20240229161212053

スライドバーをドラッグするだけで、複数のターゲットのHSV範囲を迅速に特定でき、特定の値にまで正確に設定することも可能です。 コードは以下の通りです:

 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'  # 画像の場所、使用時にはこの属性のみを変更すればよい
# スライドバーのコールバック関数、スライドバー位置の値を取得する  
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  
    
# 6つのスライドバーを配置するウィンドウを作成  
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)  
    # コールバック関数を呼び出し、スライドバーの値を取得  
    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])  
    # 指定された色範囲内のマスクを取得  
    mask = cv2.inRange(imgHSV, lower, upper)  
    # 元の画像に対してビット単位のAND操作を行い、マスク領域を保持  
    imgResult = cv2.bitwise_and(img, img, mask=mask)  
    cv2.imshow("Mask", mask)  
    cv2.imshow("Result", imgResult)  
    cv2.waitKey(1)
Buy me a coffee~
Tim 支付宝支付宝
Tim 贝宝贝宝
Tim 微信微信
0%