Я пытаюсь преобразовать кучу 32-битных файлов OpenExr в 8-битные файлы.
Для процесса конвертации я использовал рецепты Python, приведенные в документации oiio.
Преобразование из exr в tif работало нормально, но я ничего не получаю, если добавляю требуемую скорость передачи в качестве параметра (точно следуя формуле python из документации)
ЗатемЯ попытался сначала просто конвертировать форматы файлов, а затем использовать ImageBufAlgo.colorconvert, но вместо этого я получаю много сообщений об ошибках.
Я хотел просто повернуть 32-битное изображение и уменьшить его до 8-бит с помощьюправильная настройка гаммы.
Сначала я попробовал
python
image = 'C/.../image.exr' # grabbing file from network
buf = oiio.ImageBuf(image)
buf.write(texture_directory + 'outImage.tif', "uint8")
Это не сработало вообще. Код работал, но в указанном мною каталоге не было изображений.
Затем я изменил его на
python
image = 'C/.../image.exr' # grabbing file from network
buf = oiio.ImageBuf(image)
buf.write(texture_directory + 'outImage.tif')
И это сработало! У меня были изображения, за исключением того, что все они были 32-битными файлами, которые мне нужно изменить на 8-битные.
Поэтому я подумал, что попробую перебрать новые tif-изображения, а затем выполнить преобразование цвета в отдельных шагах. Я протестировал только одно изображение, чтобы посмотреть, смогу ли я даже заставить работать функцию colorconvert.
python
new_buf = oiio.ImageBuf('outImage.tif')
dst = oiio.ImageBufAlgo.colorconvert(new_buf, "sRGB", "linear")
Точно так, как это было в документации. Вместо этого я получил кучу сообщений об ошибках, которые не слишком отличались от тех, которые я получал из-за проблемы с цветом выделенного пикселя, с которой я столкнулся вчера
Error: Python argument types in
# ImageBufAlgo.colorconvert(ImageBuf, str, str)
# did not match C++ signature:
# colorconvert(class OpenImageIO::v1_5::ImageBuf {lvalue} dst, class OpenImageIO::v1_5::ImageBuf src, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > from, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > to, bool unpremult=False, struct OpenImageIO::v1_5::ROI roi=<OpenImageIO.OpenImageIO.ROI object at 0x00000257C97A6348>, int nthreads=0)
# Traceback (most recent call last):
# File "<maya console>", line 27, in <module>
# ArgumentError: Python argument types in
# ImageBufAlgo.colorconvert(ImageBuf, str, str)
# did not match C++ signature:
# colorconvert(class OpenImageIO::v1_5::ImageBuf {lvalue} dst, class OpenImageIO::v1_5::ImageBuf src, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > from, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > to, bool unpremult=False, struct OpenImageIO::v1_5::ROI roi=<OpenImageIO.OpenImageIO.ROI object at 0x00000257C97A6348>, int nthreads=0) #
Буду очень признателен за любую помощь иобъяснение того, что я не получаю.
Редактировать: я добавляю код 1.7, который я попробовал после ответа Ларри:
src = ImageBuf(filename)
dst = ImageBuf()
result_bool = ImageBufAlgo.colorconvert (dst, src, 'sRGB', 'linear')
Полученное сообщение об ошибке таково:
# Error: Python argument types in
# ImageBufAlgo.__init__(ImageBufAlgo, ImageBuf, ImageBuf, str, str)
# did not match C++ signature:
# __init__(struct _object * __ptr64)
# Traceback (most recent call last):
# File "<maya console>", line 32, in <module>
# ArgumentError: Python argument types in
# ImageBufAlgo.__init__(ImageBufAlgo, ImageBuf, ImageBuf, str, str)
# did not match C++ signature:
# __init__(struct _object * __ptr64) #