Похоже, что openCV RGB to HSV не имеет ожидаемых значений. Я взял ваше изображение и преобразовал его в HSV и посмотрел диапазоны каждого канала. Используя np.max(imageHSV[:,:,c])
и np.min(imageHSV[:,:,c])
на каждом канале, я увидел, что оттенок отображается в диапазоне от 0 до 360, а насыщенность и значение масштабируются от 0 до 1. Используя ваш метод обрезки на вашем изображении:
img = np.clip(img, 0, 255)
img[:,:,0] = np.clip(img[:,:,0],0, 179)
и затем, преобразовав обратно в RGB, я получил такой результат:
Я попытался вместо этого обрезать от 0 до 360 (оттенок) и от 0 до 1 (насыщенность изначение), как это:
imageHSV = cv2.cvtColor(image,cv2.COLOR_RGB2HSV)
imageHSV[:,:,1] = np.clip(imageHSV[:,:,1], 0.0, 1.0)
imageHSV[:,:,2] = np.clip(imageHSV[:,:,2], 0.0, 1.0)
imageHSV[:,:,0] = np.clip(imageHSV[:,:,0],0.0, 360.0)
Затем я преобразовал обратно в RGB, и это был результат.
edit - Выход HSV зависит от типа данных, которые вы вводите в преобразователь, см. эту документацию. У моего изображения были диапазоны (0-360, 0-1, 0-1) для (H, S и V) из-за того, как я передал его в cv2.cvtColor. Проверьте свои данные, которые вы передаете в функцию преобразования RGB2HSV, и проверьте выходные данные, чтобы увидеть, есть ли у вас диапазоны, которые вы хотите обрезать. Я все еще думаю, что это может быть тип данных или проблема с обрезкой данных.