[Python] HSV mask for color based image segmentation is not working

Discussão em 'Python' iniciado por Stack, Setembro 1, 2025.

  1. Stack

    Stack Membro Participativo

    I am working on image segmentation based on color and for this i am using HSV masks but they don't seem to work. Can somebody point out what i am doing wrong because i have tried all the methods mentioned online and it doesn't seem to be working.

    I am not sure whether to pass HSV values or RGB Values in the inRange() function of cv2. But i have tried both the options.

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt

    img = cv2.imread('colors.png')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img_hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)

    light_color = np.uint8([[[245,183,22]]])
    light_color = cv2.cvtColor(light_color, cv2.COLOR_RGB2HSV)
    light_color = np.ravel(light_color)


    dark_color = np.uint8([[[255,193,32]]])
    dark_color = cv2.cvtColor(dark_color, cv2.COLOR_RGB2HSV)
    dark_color = np.ravel(dark_color)


    #light_color = np.array([22,232,245])
    #dark_color = np.array([32,218,255])

    mask = cv2.inRange(img_hsv, light_color, dark_color)
    result = cv2.bitwise_and(img, img, mask=mask)

    plt.subplot(1, 2, 1)
    plt.imshow(img)
    plt.subplot(1, 2, 2)
    plt.imshow(mask)
    plt.show()



    import cv2
    import numpy as np
    import matplotlib.pyplot as plt

    img = cv2.imread('colors.png')
    img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    light_color = np.array([[[245,183,22]]])

    dark_color = np.array([[[255,193,32]]])

    #light_color = np.array([22,232,245])
    #dark_color = np.array([32,218,255])

    mask = cv2.inRange(img_hsv, light_color, dark_color)
    result = cv2.bitwise_and(img, img, mask=mask)

    cv2.imshow('img', img)
    cv2.imshow('mask', mask)
    cv2.imshow('result', result)

    Continue reading...

Compartilhe esta Página