Создание цветной области на черно-белом изображении
Мне нужно сделать черно-белое изображение с цветной областью. Я написал данный код:
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
crop = gray_img[350:420, 320:440]
crop_bgr = cv2.cvtColor(crop, cv2.COLOR_GRAY2BGR)
gray_img[350:420, 320:440] = crop_bgr
cv2.imshow('Color image', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Но он выдает данную ошибку:
ValueError Traceback (most recent call last)
Cell In[104], line 4
2 crop = gray_img[350:420, 320:440]
3 crop_bgr = cv2.cvtColor(crop, cv2.COLOR_GRAY2BGR)
----> 4 gray_img[350:420, 320:440] = crop_bgr
5 cv2.imshow('Color image', gray_img)
6 cv2.waitKey(0)
ValueError: could not broadcast input array from shape (70,120,3) into shape (70,120)
Как заставить этот код работать?
Ответы (2 шт):
Я вижу два простых пути.
Нарисовать серую картинку, потом поверх цветную.
Второй способ - взять целую цветную картинку, и перевести цвета везде, кроме нужной области, в цвета с одинаковыми r,g,b компонентами (не меняя формат на gray)
Как вы собираетесь восстановить цвета из серого в третьей строчке, непонятно...
И так, как же я решил свою проблему? Для начала я вырезал нужную часть изображения на оригинальном фото. После конвертировал оригинальное фото из формата BGR в HSV. Далее я просто понизил насыщенность до 0, и конвертировал полученное изображение обратно в BGR. И в итоге получаем черно-белое изображение с цветной областью. Код представлен ниже:
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hsv_img[:, :, 1] = 0
black_and_white_image = cv2.cvtColor(hsv_img, cv2.COLOR_HSV2BGR)
black_and_white_image[350:420, 320:440] = crop_img
cv2.imshow('Black and White Image with Color Area', black_and_white_image)
cv2.waitKey(0)
cv2.destroyAllWindows()