Я хочу изменить цвет дивана на данном изображении:
Фон остается прежним, нужно изменить только цвет дивана. Я пытался использовать технику маскирования, но не смог получить нужный цвет. Даю образец цвета.
Пожалуйста, дайте мне знать, есть ли какие-нибудь простые способы настроить цвет дивана.
Я уже пробовал, меняя оттенок. Я не могу получить нужный цвет, изменив оттенок с помощью библиотеки openCV. Если это возможно с помощью CSS и Javascript, это тоже хорошо.
Заранее спасибо.
Код FYI ниже:
import cv2
import numpy as np
from google.colab.patches import cv2_imshow
image = cv2.imread('/content/bluesofa.jpg')
cv2_imshow(image)
result = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# lower boundary Blue color range values; Hue (100 - 110)
lower1 = np.array([90, 100, 20])
upper1 = np.array([100, 255, 255])
# upper boundary Blue color range values; Hue (120 - 130)
lower2 = np.array([100,100,20])
upper2 = np.array([120,255,255])
lower_mask = cv2.inRange(image, lower1, upper1)
upper_mask = cv2.inRange(image, lower2, upper2)
full_mask = lower_mask + upper_mask;
result = cv2.bitwise_and(result, result, mask=full_mask)
cv2_imshow(full_mask)
cv2.imwrite('masked_object.jpg',result)
img= cv2.imread('/content/masked_object.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# extract the hue channel from the hsv image
hue = img_hsv[:,:,0]
# increment the hue values by 60(random number,could be any number)
hue = hue + 60
# if pixel values become > 180, subtract 180
cond_h = hue[:, :] > 180
hue[cond_h] = hue[cond_h] - 180
# assign the modified hue channel to hsv image
img_hsv[:,:,0] = hue
im = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)
result = cv2.bitwise_or(original_img,im)
cv2_imshow(result)
Спасибо за ответ, я добавил код. Пожалуйста, пройдите через него.
Должен ли это быть OpenCV для этого? Существует множество бесплатных программ для редактирования фотографий, которые легко справятся с этим вручную. (Paint.NET, Gimp,...)
Я согласен, что существует множество редакторов для редактирования фотографий, таких как photoshop, paint.net и т. д., но попытка с opencv показалась немного сложной, поэтому попробуйте. В OpenCV есть много функций обработки изображений, но мне не удается выполнить эту тривиальную задачу.
Вот очень простой пример того, как вы можете изменить оттенок, насыщенность и значение маскируемого объекта:
import cv2
import numpy as np
img = cv2.imread('bluesofa.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([90, 100, 20])
upper = np.array([120, 255, 255])
mask = cv2.inRange(hsv, lower, upper)
inv_mask = cv2.bitwise_not(mask)
h, s, v = cv2.split(hsv)
h = np.mod(h + 170, 180)
s = np.clip(s - 100, 0, 255)
v = np.clip(v + 40, 0, 255)
hsv = cv2.merge([h, s, v])
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
result = cv2.bitwise_or(cv2.bitwise_and(img, img, mask=inv_mask), cv2.bitwise_and(bgr, bgr, mask=mask))
cv2.imwrite("out.jpg", result)
Вывод:
Привет, Маркус, я хотел бы знать, как вы получаете значения (170,100,40) для обновления h, s, v в приведенном выше коде.
Ну я просто пытался. Если вы хотите сделать это автоматически, я думаю, вам понадобится некоторая опорная точка P1 с синего дивана и некоторая опорная точка с изображения с целевым цветом и вычисление разницы в пространстве HSV.
Я пробовал с центральной точкой изображения, а также с центральной точкой целевого цветного изображения. с этой разницей я не получал эти значения. Поэтому мне было интересно, как вы их получили. Нужно найти способ получить эти значения.
Если вы присмотритесь к изображениям, вы увидите, что они имеют текстуру с разными цветами. Возможно, вы можете использовать среднее значение небольшого региона?
Кажется очень сложным автоматически генерировать значения, если я изменяю только оттенок, я не получаю требуемый цвет, настраивая значения s и v, я теряю текстуру, получить точные значения целевого цвета с текстурой действительно сложно. Ценим любую помощь по этому поводу.
@Priya KS Вы можете попробовать задать новый вопрос здесь, в Stackoverflow. Но имейте в виду, что здесь вы можете рассчитывать на помощь только в том случае, если придете со своей идеей и очень конкретной, воспроизводимой проблемой.
Пожалуйста, поделитесь кодом, который объясняет, как далеко вы продвинулись, пытаясь изменить оттенок, и почему результаты не оправдали ваших ожиданий!