Я пытаюсь пройти через каждый пиксель png, который я захватил с помощью камеры моего малины pi, и изменять выборочное изменение пикселей, которые находятся выше или ниже определенного значения r, g или b , Я знаю, что это довольно неэффективный алгоритм, я просто пытаюсь использовать скрипты python. Я основывал свой код на коде @ Константина на вопросе: How can I read the RGB value of a given pixel in Python? Его код ниже.Изменение пикселов png выборочно с PyPNG на Raspbian
import png, array
point = (2, 10) # coordinates of pixel to be painted red
reader = png.Reader(filename='image.png')
w, h, pixels, metadata = reader.read_flat()
pixel_byte_width = 4 if metadata['alpha'] else 3
#The line below is, I think wrong. I'll point out the what I did in my code below
pixel_position = point[0] + point[1] * w
new_pixel_value = (255, 0, 0, 0) if metadata['alpha'] else (255, 0, 0)
pixels[
pixel_position * pixel_byte_width :
(pixel_position + 1) * pixel_byte_width] = array.array('B', new_pixel_value)
output = open('image-with-red-dot.png', 'wb')
writer = png.Writer(w, h, **metadata)
writer.write_array(output, pixels)
output.close()
И я изменил его к этому:
#!/usr/bin/python
import png, array
reader = png.Reader(filename='test.png')
w, h, pixels, metadata = reader.read_flat()
pixel_byte_width = 4 if metadata['alpha'] else 3
for x in range(w):
for y in range(h):
point_index = x+(y-1)*w#This is the bit that I said I'd fix above.
r = pixels[point_index * pixel_byte_width + 0]
g = pixels[point_index * pixel_byte_width + 1]
b = pixels[point_index * pixel_byte_width + 2]
pixel = pixels[point_index * pixel_byte_width :
(point_index+1) * pixel_byte_width]
#Above we have all the info about each byte, and below is our devious plan
new_pixel = (0, 0, 0, 0) if metadata['alpha'] else (0, 0, 0)
#if g > 175:
pixel = array.array('B', new_pixel)
output = open('test_edited.png', 'wb')
writer = png.Writer(w, h, **metadata)
writer.write_array(output, pixels)
output.close()
Что происходит пи думает в течение минуты или двух, а затем я могу открыть новый формат PNG, который точно так же. что мне не хватает в моем сценарии, или есть лучшая платформа, чем python, чтобы делать пиксельные элементы на Raspbian Jessie?
Большое спасибо!
Спасибо за ваш ответ, к сожалению, как подушка, так и PIL не находятся в репозитории Jessie. –
@ Dan P Нет, но подушка находится в PyPI (Индекс пакета Python), что означает, что их можно легко установить с помощью подушки «pip install». –
Ну конечно! Отлично. Большое спасибо. Я не знаю, где я читал это о подушке и PIL. –