opencv如何确定图片中想要跟踪物体的HSV值范围

这几天在学习opencv_python时遇到不知如何确定图片要跟踪物体HSV范围的情况,几经查找和总结,终于找到了相对精确的办法。

思路如下:先确定图片中物体的HSV值,然后创建HSV进度条(H、S、V最大最小值共6条进度条),通过调节进度条,确定HSV范围。

一、用如下方法确定想要颜色的HSV值,比如蓝色。

import cv2
import numpy as np

blue = np.uint8([[[255,0,0]]])

hsv_blue = cv.cvtColor(blue, cv.COLOR_BGR2HSV)

print(hsv_blue)

#输出结果为: [[[ 120 255 255]]]

二、创建一个HSV上下阈值的六个进度条(h_min,h_max,s_min,s_max,v_min,v_max)并输出原图、掩模图、效果图。

import cv2
import numpy as np
import time

def nothing(x):

    pass

cv2.namedWindow('image',cv2.WINDOW_AUTOSIZE)

blue = np.uint8([[[255,0,0]]])

hsv_blue = cv2.cvtColor(blue,cv2.COLOR_BGR2HSV)

print(hsv_blue)

cv2.createTrackbar('Hue min','image',10,179,nothing)

cv2.createTrackbar('Hue max','image',10,179,nothing)

cv2.createTrackbar('sat min','image',10,255,nothing)

cv2.createTrackbar('sat max','image',10,255,nothing)

cv2.createTrackbar('val min','image',10,255,nothing)

cv2.createTrackbar('val max','image',10,255,nothing)

img = cv2.imread(r'D:\python\python\installation package\1.JPG')

while(1):

    hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

    h_min = cv2.getTrackbarPos('Hue min','image')

    h_max = cv2.getTrackbarPos('Hue max','image')

    s_min = cv2.getTrackbarPos('sat min','image')

    s_max = cv2.getTrackbarPos('sat max','image')

    v_min = cv2.getTrackbarPos('val min','image')

    v_max = cv2.getTrackbarPos('val max','image')

    lower = np.array([h_min,s_min,v_min])

    upper = np.array([h_max,s_max,v_max])

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

    res = cv2.bitwise_and(img,img,mask=mask)

    cv2.imshow('img',img)

    cv2.imshow('mask',mask)

    cv2.imshow('res',res)

    k = cv2.waitKey(5)

    if k == 27:

        break

cv2.destroyAllWindows()

从图1可知蓝色HSV值为[120,255,255],那么H值可预先定为H-10和H+10,对于S、V两值的上限可定为255,255(即初定蓝色HSV值下限为[110,待调整值,待调整值],上限为[130,255,255]),至于下限待调整值,则可通过调节进度条,让想要的物体图形尽可能显示出来,那么当想要的物体尽可能显示出来时,那么就可以确定物体HSV值的范围。

opencv如何确定图片中想要跟踪物体的HSV值范围_第1张图片

opencv如何确定图片中想要跟踪物体的HSV值范围_第2张图片

 初步得到上述大概图,接下来我们再调整sat_min,和val_min,如果结果图还不能要求,则要继续调节h_min和h_max的值。结果图如下:

opencv如何确定图片中想要跟踪物体的HSV值范围_第3张图片

 结果显示,对于该图蓝色物体的HSV值的取值范围为lower=[91,13,38],upper=[122,255,255]。

下图是各种颜色HSV值的参考值图

opencv如何确定图片中想要跟踪物体的HSV值范围_第4张图片

 以上内容是本人学习总结,如有错误烦请指出,部分内容参考于网络,如有侵权烦请通知本人删除,谢谢。

你可能感兴趣的:(opencv,python,计算机视觉)