如何在OpenCV中為InRange閾值選擇顏色的最佳HSV值
- 1. 效果圖
- 2. 原始碼
- 參考
之前的博客介紹了如何使用Python,OpenCV通過HSV顏色空間轉換檢測物件,并進行軌跡追蹤,怎么選定合適的HSV顏色閾值范圍非常非常非常的重要,
這篇博客將介紹如何在OpenCV中為InRange閾值選擇顏色的最佳HSV值范圍,
1. 效果圖
原始圖如下:

選出紅色的范圍:
(0,40,45)~(30,255,255)
選出黑色的范圍:
(0,0,0)~(179,255,254)

2. 原始碼
# 確定hsv顏色的最佳閾值
import cv2
import numpy as np
def nothing(x):
pass
# 創建一個視窗圖片
cv2.namedWindow('image')
# 對顏色變化創建軌跡蘭
cv2.createTrackbar('HMin', 'image', 0, 179, nothing) # Hue is from 0-179 for Opencv
cv2.createTrackbar('SMin', 'image', 0, 255, nothing)
cv2.createTrackbar('VMin', 'image', 0, 255, nothing)
cv2.createTrackbar('HMax', 'image', 0, 179, nothing)
cv2.createTrackbar('SMax', 'image', 0, 255, nothing)
cv2.createTrackbar('VMax', 'image', 0, 255, nothing)
# 設定默認HSV空間的最大值
cv2.setTrackbarPos('HMax', 'image', 179)
cv2.setTrackbarPos('SMax', 'image', 255)
cv2.setTrackbarPos('VMax', 'image', 255)
# 初始化HSV空間最大、最小值
hMin = sMin = vMin = hMax = sMax = vMax = 0
phMin = psMin = pvMin = phMax = psMax = pvMax = 0
img = cv2.imread('images/circle.png')
output = img
waitTime = 33
while (1):
# 獲取軌跡欄的當前位置
hMin = cv2.getTrackbarPos('HMin', 'image')
sMin = cv2.getTrackbarPos('SMin', 'image')
vMin = cv2.getTrackbarPos('VMin', 'image')
hMax = cv2.getTrackbarPos('HMax', 'image')
sMax = cv2.getTrackbarPos('SMax', 'image')
vMax = cv2.getTrackbarPos('VMax', 'image')
# 設定顯示的HSV最大最小值
lower = np.array([hMin, sMin, vMin])
upper = np.array([hMax, sMax, vMax])
# 創建HSV影像,并根據最低、最高閾值進行閾值化
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower, upper)
output = cv2.bitwise_and(img, img, mask=mask)
# 展示是否HSV值有變化
if ((phMin != hMin) | (psMin != sMin) | (pvMin != vMin) | (phMax != hMax) | (psMax != sMax) | (pvMax != vMax)):
print("(hMin = %d , sMin = %d, vMin = %d), (hMax = %d , sMax = %d, vMax = %d)" % (
hMin, sMin, vMin, hMax, sMax, vMax))
phMin = hMin
psMin = sMin
pvMin = vMin
phMax = hMax
psMax = sMax
pvMax = vMax
# 展示輸出影像
cv2.imshow('image', output)
# 等待33毫秒或者按下q鍵退出回圈
if cv2.waitKey(waitTime) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
參考
參考:https://www.cnpython.com/qa/498520
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297666.html
標籤:其他
下一篇:OpenCV-影像對比度
