使用opencv寻找合适的HSV参数,用来提取颜色块,参数使用滑动块实时调节,显示提取后的mask图和提取的原图部分
代码:
import cv2
import numpy as np
"""
寻找合适的hsv参数
"""
def nothing(*arg):
pass
cap = cv2.VideoCapture(0) # 打开usb摄像头
cv2.namedWindow("HSV",cv2.WINDOW_AUTOSIZE)
cv2.createTrackbar("H_L", "HSV", 35, 255, nothing)
cv2.createTrackbar("H_U", "HSV", 90, 255, nothing)
cv2.createTrackbar("S_L", "HSV", 30, 255, nothing)
cv2.createTrackbar("S_U", "HSV", 255, 255, nothing)
cv2.createTrackbar("V_L", "HSV", 90, 255, nothing)
cv2.createTrackbar("V_U", "HSV", 255, 255, nothing)
# cv2.createTrackbar('LowerbH',winName,4,255,nothing)
# cv2.createTrackbar('UpperbH',winName,222,255,nothing)
# cv2.createTrackbar('LowerbS',winName,5,255,nothing)
# cv2.createTrackbar('UpperbS',winName,93,255,nothing)
# cv2.createTrackbar('LowerbV',winName,19,255,nothing)
# cv2.createTrackbar('UpperbV',winName,255,255,nothing)
winName = 'Colors of the rainbow'
while cap.isOpened():
_, frame = cap.read()
if not _:
break
frameBGR = cv2.GaussianBlur(frame, (5, 5), 0)
hsv = cv2.cvtColor(frameBGR, cv2.COLOR_BGR2HSV)
#cv2.imshow("frame", frame)
h_l = cv2.getTrackbarPos("H_L", "HSV")
s_l = cv2.getTrackbarPos("S_L", "HSV")
v_l = cv2.getTrackbarPos("V_L", "HSV")
h_u = cv2.getTrackbarPos("H_U", "HSV")
s_u = cv2.getTrackbarPos("S_U", "HSV")
v_u = cv2.getTrackbarPos("V_U", "HSV")
img_target = cv2.inRange(hsv, (h_l, s_l, v_l), (h_u, s_u, v_u))
# img_target=cv2.inRange(img_original,(lowerbH,lowerbS,lowerbV),(upperbH,upperbS,upperbV))
# 输入图像与输入图像在掩模条件下按位与,得到掩模范围内的原图像
kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))
# 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作
mask = cv2.morphologyEx(img_target, cv2.MORPH_OPEN, kernal)
# 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernal)
img_specifiedColor = cv2.bitwise_and(frame, frame, mask=img_target)
cv2.imshow(winName, img_specifiedColor)
cv2.imshow("mask",img_target)
k = cv2.waitKey(100) & 0xff
if k == 27:
break