使用`cv:inRang‘(OpenCV)选择正确的上、下HSV边界进行颜色检测

使用`cv:inRang‘(OpenCV)选择正确的上、下HSV边界进行颜色检测

我有一张咖啡罐的图片,上面有一个橙色的盖子,我想找到这个位置。在这里image.

gcolor 2实用程序显示位于盖子中心的HSV为(22,59,100)。问题是如何选择颜色的界限?我试过min=(18,40,90)和max=(27,255,255),但结果出乎意料。result

下面是Python代码:

import cv

in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'

ORANGE_MIN = cv.Scalar(18, 40, 90)
ORANGE_MAX = cv.Scalar(27, 255, 255)
COLOR_MIN = ORANGE_MIN
COLOR_MAX = ORANGE_MAX

def test1():
    frame = cv.LoadImage(in_image)
    frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)
    cv.CvtColor(frame, frameHSV, cv.CV_RGB2HSV)
    frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)
    cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)
    cv.SaveImage(out_image_thr, frame_threshed)

if __name__ == '__main__':
    test1()


catspeake
浏览 2177回答 3
3回答

小唯快跑啊

好的,找到颜色HSV空间是一个古老而又普遍的问题。我做了一个hsv-colormap快速查找特殊颜色。下面是:x轴表示Hue在[0,180]中,y-axis 1表示Saturation在[0,255]中,y-axis 2表示S = 255,同时保持V = 255.要找到颜色,通常只需查找H和S,并在范围内设置v(20,255)。为了找到橙色的颜色,我们查找地图,并找到最佳范围:H :[10, 25], S: [100, 255], and V: [20, 255]..所以面具是cv2.inRange(hsv,(10, 100, 20), (25, 255, 255) )然后我们使用找到的范围来寻找橙色的颜色,这就是结果:该方法简单但常用:#!/usr/bin/python3 # 2018.01.21 20:46:41 CST import cv2 img = cv2.imread("test.jpg") hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv,(10, 100, 20), (25, 255, 255) ) cv2.imshow("orange", mask);cv2.waitKey();cv2.destroyAllWindows()类似的答案:如何定义阈值以检测图像中的绿色对象:OpenCV用InRangeS选择OpenCV阈值的HSV值
打开App,查看更多内容
随时随地看视频慕课网APP