Есть ли способ извлечь информацию о цвете пикселя из изображения с помощью привязок Python OpenImageIO - PullRequest
0 голосов
/ 23 октября 2019

Я хочу спросить более опытных людей, как получить значения RGB пикселя в изображении, используя привязки Python OIIO.

Я только начал использовать OIIO и незнаком с библиотекой, а такжеманипулирование изображениями на уровне кода.

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

A) Какую команду даже использовать для получения информации о пикселях (похоже, что get_pixel может работать)

и

B) Как заставить его работать. Я не совсем понимаю требования к параметрам.

Редактировать:

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

Буду признателен за любую помощь, спасибо.

Редактировать: добавив код

buffer = oiio.ImageBuf('image.tif')

array = buffer.read(0, 0, True)

print buffer.get_pixels(array)

полученное сообщение об ошибке:

# Error: Python argument types in
#     ImageBuf.get_pixels(ImageBuf, bool)
# did not match C++ signature:
#     get_pixels(class OpenImageIO::v1_5::ImageBuf, enum OpenImageIO::v1_5::TypeDesc::BASETYPE)
#     get_pixels(class OpenImageIO::v1_5::ImageBuf, enum OpenImageIO::v1_5::TypeDesc::BASETYPE, struct OpenImageIO::v1_5::ROI)
#     get_pixels(class OpenImageIO::v1_5::ImageBuf, struct OpenImageIO::v1_5::TypeDesc)
#     get_pixels(class OpenImageIO::v1_5::ImageBuf, struct OpenImageIO::v1_5::TypeDesc, struct OpenImageIO::v1_5::ROI)

1 Ответ

0 голосов
/ 23 октября 2019

OpenImageIO имеет несколько классов для работы с изображениями, с различными уровнями абстракции. Предполагая, что вы заинтересованы в классе ImageBuf, я думаю, что самый простой способ получить доступ к отдельным пикселям из Python (с OpenImageIO 2.x) будет выглядеть так:

import OpenImageIO as oiio
buf = ImageBuf ("foo.jpg")
p = buf.getpixel (50, 50)   # x, y
print (p)

p будет массивом numpy, так что это будет производить как

(0.01148223876953125, 0.0030574798583984375, 0.0180511474609375)
...