【问题标题】:How to get low and high values of hsv color in python opencv如何在python opencv中获取hsv颜色的低值和高值
【发布时间】:2019-07-03 05:13:38
【问题描述】:

我正在尝试在 python opencv 中检测几种颜色。为此,我需要定义低和高 hsv 值,以便代码可以读取它并检测颜色。现在我面临的问题是如何获得高和低 hsv 颜色。我指的是下图

我需要检测这件夹克,因此需要输入它的高和低 hsv。为此,我得到了对这个code 的引用,它允许选择图像的任何部分,并为其输出高和低 hsv 值。但据我所知,hsv 值不能大于 100,但是这个代码和大多数其他在线代码给出的 hsv 值都大于 100,这让我很困惑这些值如何大于100.

谁能解释一下我们如何获得低和高hsv值的值

【问题讨论】:

    标签: python opencv hsv


    【解决方案1】:

    试试下面的代码:

    import cv2
    import numpy as np
    
    img = cv2.imread("jacket.jpg")
    
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    
    # mask of green (36,25,25) ~ (86, 255,255)
    mask = cv2.inRange(hsv, (36, 25, 25), (70, 255,255))
    
    green = cv2.bitwise_and(img,img, mask= mask)    
    
    cv2.imshow('Image', green)
    cv2.waitKey(0)
    cv2.destroyAllWindowss()
    

    输出:

    查看thisstackoverflow 讨论,了解如何正确选择颜色检测的上限和下限 hsv 值。

    【讨论】:

    • 你是如何得到这些值的(36, 25, 25), (70, 255,255)
    • 感谢您指出该答案。我现在有点理解这个概念了。在那个答案中,作者已经解释了色调和饱和度,但我无法理解他是如何获得该橙色的 v 的值。你能解释一下吗。谢谢
    • 嘿@SAndrew,这完全是随机的。他从那里提供的图表中选择了它。您必须查看哪种组合符合您的要求。当您沿 y 方向接近红色时,您会看到橙色。
    【解决方案2】:

    找不到资源,但找到了类似的东西并成功了 有用,感谢作者

    import cv2
    import imutils  
    import numpy as np  
    
    image_hsv = None   # global
    pixel = (20,60,80) # some stupid default
    
    # mouse callback function
    def pick_color(event,x,y,flags,param):
        if event == cv2.EVENT_LBUTTONDOWN:
            pixel = image_hsv[y,x]
    
            #you might want to adjust the ranges(+-10, etc):
            upper =  np.array([pixel[0] + 10, pixel[1] + 10, pixel[2] + 40])
            lower =  np.array([pixel[0] - 10, pixel[1] - 10, pixel[2] - 40])
            print(pixel, lower, upper)
    
            image_mask = cv2.inRange(image_hsv,lower,upper)
            cv2.imshow("mask",image_mask)
    
    def main():
        import sys
        global image_hsv, pixel # so we can use it in mouse callback
    
        image_src = cv2.imread("myimage.jpeg")  # pick.py my.png
        image_src = imutils.resize(image_src, height=800)
        if image_src is None:
            print ("the image read is None............")
            return
        cv2.imshow("bgr",image_src)
    
        ## NEW ##
        cv2.namedWindow('hsv')
        cv2.setMouseCallback('hsv', pick_color)
    
        # now click into the hsv img , and look at values:
        image_hsv = cv2.cvtColor(image_src,cv2.COLOR_BGR2HSV)
        cv2.imshow("hsv",image_hsv)
    
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    if __name__=='__main__':
        main()
    

    加载的图像如下所示:

    点击小球后,您会得到类似的图像,

    最后:真正的BGR值,HSV上下边界会在终端打印如下,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多