Python (pygame): Получить информацию о цвете изображения?

Вопрос: Моя конечная цель - найти цвет в изображении (в данном случае белый) и заменить его другим цветом (на основе определенных обстоятельств). Таким образом, при изменении определенной переменной белый заменяется определенным цветом. Однако, чтобы попасть туда, я сейчас просто играю с изображениями (используя учебники..etc). Я пытаюсь использовать приведенный ниже код для печати цветовой палитры изображения.

Вопрос:

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

Однако, чтобы попасть туда, я сейчас просто играю с изображениями (используя учебники..etc). Я пытаюсь использовать приведенный ниже код для печати цветовой палитры изображения. Я понимаю, что цвета являются “кортежем” из 3 целых чисел, представляющих RGB. 0 = самый темный, 255 = белый. Итак, изображение, которое я тестирую, представляет собой черно-белое изображение. Я ожидаю нечто вроде “(0,0,0), (255,255,255)”. Итак, я решил, могу ли я зайти так далеко, тогда я мог бы написать код, чтобы заменить “(255,255,255)” на соответствующий цвет.

Я упомянул конечную цель, потому что я очень хорошо знаю, что мой подход может быть не лучшим, и, возможно, у кого-то есть лучший способ, я могу это сделать. Если нет, я бы хотел, по крайней мере, иметь возможность печатать строку, ссылающуюся на цвета, которые содержит изображение. “NOFRAME” был отличным советом, который я нашел на этом сайте, так как я фактически не “использую” изображения/графику – просто используя их атрибуты.

image1=r»C:Python27Libsite-packagespygameexamplesdataimage1.jpg» image2=r»C:Python27Libsite-packagespygameexamplesdataimage2.png» import pygame, sys from pygame.locals import * pygame.init() pygame.display.set_mode((1,1), pygame.NOFRAME) background = pygame.image.load(image1).convert() mouse_c=pygame.image.load(image2).convert_alpha() colorpal = pygame.Surface.get_palette(mouse_c) print colorpal Лучший ответ:

То, что вы хотите сделать, потребует много работы на уровне пикселей, поэтому я рекомендую вам использовать объект pygame.PixelArray для прямого доступа к пикселям поверхности (ов).

Для того, что вы специально хотите сделать, похоже, что вы можете использовать метод pygame.PixelArray.replace().

Ответ №1

Вы можете получить отдельные пиксели на поверхностях изображений, используя метод get_at для поверхностей Pygame – как в mouse_c.get_at((0,0)).

Это строго то, о чем вы просите, но это не устраивает никаких реальных потребностей в мире, поскольку это чрезвычайно важно, и я говорю чрезвычайно, медленно обрабатывая все пиксели изображения, вызывающего именно это.

Вы можете взять буфер изображения с помощью get_buffer и интерпретировать данные там, raw или передать буфер вместе с функцией, написанной в собственном коде, чтобы получить некоторую скорость.

Тем не менее, если ваша цель – заменить цвет другим в режиме реального времени, вы можете прибегнуть к использованию индексированных изображений. Таким образом, на каждом изображении будет таблица цветов, вы просто измените, скажем, номер цвета 10 на 0,0,255, и когда вы визуализируете изображение, все вхождения этого цвета становятся синими. Это быстро – не так эффективно, как в 8-битное время видеоигр, когда это было сделано с помощью аппаратного обеспечения, – но оно будет на порядок быстрее любых замещений, которые вы пытаетесь сделать в чистом коде Python.

Оцените статью
Добавить комментарий