PyOpenColorIO - Converting a simple singe RBG array to another colorspace


mhamid3d@...
 

Hi all,

I am new to this and hoping to get some help. I have a simple single pixel RGB value that is in a Raw color space. I would like to convert it to another colorspace. I have the following code, which produced no errors but I'm not getting the values I'm expecting. As reference I'm using Nuke with the OCIOColorSpace node. I made sure to set my Display Transform to None in Nuke. Then I created a simple constant with pure red. (1, 0, 0) and exported it as a Raw colorspace jpg. Loaded that into PyOpenColorIO and ran the code bellow. It returns a value very different from the one I'm getting Nuke. Am I doing something wrong?

import PyOpenColorIO as ocio
import OpenImageIO as oiio

config = ocio.GetCurrentConfig()
proc = config.getProcessor('Raw', 'Film_EIZO')

img = oiio.ImageInput.open('test_image.jpg')
pixels = img.read_image()
img.close()

imgd = proc.applyRGB(pixels)
print imgd


Larry Gritz
 

Which versions of OIIO and OCIO are you using?

I'm not sure that official releases of OCIO (prior to the current master) will work with 8 bit integer pixels, which is what you'd get from a jpeg by default. So it may be misinterpreting the values.

If you read with

    pixels = img.read_image(format='float')

then you'll get float pixels, and perhaps that will match what Nuke is doing?

As somewhat of an aside, maybe this is a contrived example and you need to do a lot more with PyOpenColorIO, but if all you are doing is color converting pixels you read with OIIO, an easier idiom would be:

img = oiio.ImageBuf('test_image.jpg')
img.read(convert='float')
oiio.ImageBufAlgo.colorconvert(img, img, 'Raw', 'Film_EIZO')
pixels = img.get_pixels()

and then you don't need to directly import or use OpenColorIO at all. (Though this assumes you built your OIIO with OCIO enabled.)



On Jun 3, 2020, at 12:55 PM, mhamid3d@... wrote:

Hi all,

I am new to this and hoping to get some help. I have a simple single pixel RGB value that is in a Raw color space. I would like to convert it to another colorspace. I have the following code, which produced no errors but I'm not getting the values I'm expecting. As reference I'm using Nuke with the OCIOColorSpace node. I made sure to set my Display Transform to None in Nuke. Then I created a simple constant with pure red. (1, 0, 0) and exported it as a Raw colorspace jpg. Loaded that into PyOpenColorIO and ran the code bellow. It returns a value very different from the one I'm getting Nuke. Am I doing something wrong?

import PyOpenColorIO as ocio
import OpenImageIO as oiio

config = ocio.GetCurrentConfig()
proc = config.getProcessor('Raw', 'Film_EIZO')

img = oiio.ImageInput.open('test_image.jpg')
pixels = img.read_image()
img.close()

imgd = proc.applyRGB(pixels)
print imgd

--
Larry Gritz





mhamid3d@...
 

I accidentally replied to sender only, but Lary's solution worked! I was in the 255 range instead of float values. Thank you!