Настроить (изменить) цвета изображения (пикселя) - python

1

Я хочу настроить цвет изображения, чтобы сделать подобное изображение с цветовыми вариантами.

Пример:

Изображение 174551 Изображение 174551

Для приведенного выше изображения я хочу заменить красный цвет другими цветами, такими как синий, зеленый, желтый, черный и т.д.

Я старался:

from PIL import Image
filename ="./Logo.jpg"

picture = Image.open(filename, 'r')
_colors = [(255, 255, 255), (128, 128, 0), (128, 128, 128), (192, 128, 0), (128, 64, 0), (0, 192, 0), (128, 64, 128), (255, 255, 255)]
width, height = picture.size

for x in range(0, width):
    for y in range(0, height):
        current_color = picture.getpixel((x,y))
        # print (current_color)
        if current_color in _colors:
            picture.putpixel((x,y), (255,5, 255))
            # print ("Y")

picture.save("./test/change.png")

Приведенный выше код является довольно распространенным кодом, который предлагается для большинства из них. Но это довольно сложно, так как он заменяет пиксель в списке " _colors ". Выходное изображение:

Изображение 174551

Любое решение вышеуказанной проблемы? Любой умный способ справиться с этим, используя машинное обучение? Любое решение с использованием другого языка программирования?

  • 0
    Вопрос не имеет ничего общего с machine-learning - будьте добры, не спамьте нерелевантные теги (удалены).
Теги:
machine-learning
image-processing
pixel
python-imaging-library
customization

1 ответ

2
Лучший ответ

Я не знаком с PIL, и я слышал, что это медленно. Итак, вот версия OpenCV:

# for red color, it easier to work with negative image 
# since hue is in [170, 180] or [0,10]
hsv_inv = cv2.cvtColor(255-img, cv2.COLOR_BGR2HSV)

# these are cyan limit, but we're working on negative image, so...
lower_range = np.array([80,0,0])
upper_range = np.array([100,255,255])

# mask the red
mask = cv2.inRange(hsv_inv, lower_range, upper_range)

# replace red by green
green_hsv = hsv_inv.copy()
green_hsv[np.where(mask)] += np.array([60,0,0], dtype=np.uint8)    
green_img = 255 - cv2.cvtColor(green_hsv, cv2.COLOR_HSV2BGR)

purple_hsv = hsv_inv.copy()
purple_hsv[np.where(mask)] -= np.array([30,0,0], dtype=np.uint8)
purple_img = 255 - cv2.cvtColor(purple_hsv, cv2.COLOR_HSV2BGR)

И результат, пожалуйста, игнорируйте галочки, как я показал их с помощью matplotlib.

Изображение 174551

Изображение 174551

  • 0
    Можете ли вы добавить немного объяснения, какие изменения нужно изменить код для других цветов, например, если я хочу заменить зеленый или синий на другой цвет ??
  • 0
    Строка, которая изменяет green_hsv , меняет цвет, т.е. меняет цвет. Вам нужно будет изменить значения оттенков, чтобы получить разные цвета, как показано в purple_hsv .
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню