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...