I was able to use OpenImageIO's OCIO support to apply a 3d LUT to my "raw image data" using the following code:
// Create lutted buffer ImageSpec luttedBufSpec = ImageSpec ( seqSpec->width, seqSpec->height, 3, TypeDesc::UINT8 ); ImageBuf luttedBuf = ImageBuf( luttedBufSpec ); ROI srcRoi = get_roi_full (*seqSpec); luttedBuf.set_pixels( srcRoi, TypeDesc::UINT8, someUnsignedCharImgData ); // ImageBufAlgo::colorconvert (luttedBuf, luttedBuf, "AlexaV3LogC", "sRGB", false, ROI::All(), 3); ImageBufAlgo::ociofiletransform (luttedBuf, luttedBuf, "C:/temp/049x050_lut.3dl"); // Dump lutted buffer as unsign char* data unsigned char* luttedPixelData = (unsigned char*)malloc( luttedBuf.spec().width*luttedBuf.spec().height*3 ); ROI luttedRoi = get_roi_full (luttedBuf.spec()); luttedBuf.get_pixels( luttedRoi, TypeDesc::UINT8 , luttedPixelData ); QImage::Format QIFormat = QImage::Format_RGB888; QImage *img = new QImage (luttedPixelData, seqSpec->width, seqSpec->height, QIFormat); The issue with this method is that it forces me to dump my "raw image data" back into an ImageBuf to apply the "filetransform" and then dump my ImageBuf data back into an "unsigned char*" object to use in Qt. This is a pretty slow process and unfortunately it takes too long for what I'm trying to achieve. Is there a better and mostly faster way to apply a "filetransform" or "colorconvert" to an image and dump the result data in an "unisgned char*" object ? On a different note, I had a hard time finding the "ociofiletransform" method in the documentation. What threw me off was the "wording" used to describe the "LUT" file path: OIIO 1.8 Documentation: bool ociofiletransform (ImageBuf &dst, const ImageBuf &src, string_view name, bool inverse=false, bool unpremult=false, ColorConfig *colorconfig=NULL, ROI roi=ROI::All(), int nthreads=0) wouldn't it be easier to call the third argument something like: "string lut_file_path" ? What is "string_view name" ? Thanks, Renaud On Apr 11, 2017, at 01:06 PM, Renaud TALON <[email protected]> wrote: Hi ! I have problems applying a 3D LUT using "FileTransformRcPtr". 1 - I load my image using OpenImageIO : _____________________________________________________________________________________________________________________ ImageInput *srcImg = ImageInput::open(filename); ImageSpec *srcSpec = new ImageSpec(srcImg->spec()); unsigned char* srcRGBpixelData = (unsigned char*)malloc(srcSpec->width*srcSpec->height*3 ); srcImg->read_scanlines( srcSpec->y, srcSpec->y+srcSpec->height, 0, 0, 3, TypeDesc::UINT8, srcRGBpixelData ); ImageSpec srcBufSpec = ImageSpec ( srcSpec->width, srcSpec->height, 3, TypeDesc::UINT8 ); ImageBuf srcBuf = ImageBuf( srcBufSpec ); ROI srcRoi = get_roi_full (*srcSpec); srcBuf.set_pixels( srcRoi, TypeDesc::UINT8, srcRGBpixelData ); srcImg->close(); ______________________________________________________________________________________________________________________ 2 - store my image in RAM as "unsigned char*" I would like to apply a 3D LUT to this "raw data" (unsigned char*) and return the result as "unsigned char*" since this is what Qt supports for QImage data. Here is what I came up with, it's currently crashing on the "m_processor->apply(luttedImg); line" ______________________________________________________________________________________________________________________ OCIO::PackedImageDesc luttedImg(reinterpret_cast<float*>(imgCache[curFrame]), seqSpec->width, seqSpec->height, 3); try { OCIO::ConstConfigRcPtr config = OCIO::GetCurrentConfig(); // Create File Transform const char *lutPath = "C:/temp/049x050_lut.3dl"; OCIO::FileTransformRcPtr transform = OCIO::FileTransform::Create(); transform->setSrc(lutPath); transform->setDirection(OCIO::TRANSFORM_DIR_FORWARD); transform->setInterpolation(OCIO::INTERP_LINEAR); OCIO::ConstProcessorRcPtr m_processor = config->getProcessor(transform, OCIO::TRANSFORM_DIR_FORWARD); // Apply transform m_processor->apply(luttedImg); } catch(OCIO::Exception &e) { qDebug() << e.what(); } // not sure how to go back to "unsigned char*" after transform is applied. reinterpret_cast<unsigned char*> ???? __________________________________________________________________________________________________________________________ As usual, any help would be greatly appreciated. Thanks, Renaud _______________________________________________ Oiio-dev mailing list [email protected] http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
_______________________________________________ Oiio-dev mailing list [email protected] http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
