Обратите внимание, что вы преобразовали изображение из RGB (в HSV) и вам необходимо преобразовать его из BGR (в HSV).
Если вы хотите только увеличить яркость фиолетового, используйте cv2.inRange () для фиолетового цвета, чтобы создать маску. Затем измените входное изображение везде с вашим текущим методом. Затем используйте маску, чтобы объединить входные и измененные изображения, чтобы показать только улучшение для фиолетовых цветов, соответствующих белому в маске.
Так что это можно сделать в Python / OpenCV.
Ввод:
import cv2
import numpy as np
# read image
img = cv2.imread('purple.png')
# set value
value = 20
# convert image to hsv colorspace
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
# create mask on purple color and also its inverted mask
low_range = (80,160,50)
high_range = (150,230,120)
mask = cv2.inRange(hsv,low_range,high_range)
inv_mask = cv2.bitwise_not(mask)
mask = cv2.merge([mask,mask,mask])
inv_mask = cv2.merge([inv_mask,inv_mask,inv_mask])
# enhance the value channel of the hsv image
lim = 255 - value
v[v > lim] = 255
v[v <= lim] += value
# convert it back to BGR colors
final_hsv = cv2.merge((h, s, v))
bgr = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
# use bit_wise_and and its inverse to combine the original and enhanced versions
bgr = cv2.bitwise_and(bgr,mask)
img = cv2.bitwise_and(img,inv_mask)
result = cv2.add(bgr,img)
# display IN and OUT images
cv2.imshow('IMAGE', img)
cv2.imshow('HSV', hsv)
cv2.imshow('MASK', mask)
cv2.imshow('RESULT', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
# save output image
cv2.imwrite('purple_enhanced.png', result)
Результат:
Если вы чередуете просмотр входа и выхода, вы увидите, что выход везде ярче.