Преобразование IplImage в osg::Image

Как я могу правильно преобразовать OpenCV IplImage в osg :: Image OpenSceneGraph?

Это мой текущий метод. Но я получаю неверные данные о цвете.

// IplImage* cvImg is a webcam output image captured using cvQueryFrame(capture)
osg::ref_ptr<osg::Image> osgImage = new osg::Image;
osgImage->setImage(cvImg->width,cvImg->height, 3,
                           GL_RGB, GL_RGB, GL_UNSIGNED_BYTE,
                           (BYTE*)(cvImg->imageData),
                           osg::Image::AllocationMode::NO_DELETE,1);

person coder9    schedule 04.06.2012    source источник


Ответы (1)


Вероятно, это проблема, связанная с собственным цветовым пространством BGR OpenCV. Вы не указываете, какую версию OpenCV вы используете, но современные версии определяют CV_BGR2RGB для использования с cvCvtColor. Возможно, сделать преобразование, как это

IplImage* pImg = cvLoadImage("lines.jpg", CV_LOAD_IMAGE_COLOR);
cvCvtColor(pImg, pImg, CV_BGR2RGB);
cvReleaseImage(&pImg);

Если вы не можете использовать этот другой вариант, используйте cvSplit для разделения и изменения порядка каналов а затем объедините их с cvMerge.

Кстати, я определенно рекомендую использовать интерфейс C++, так как он намного проще в управлении памятью и имеет больше возможностей, чем интерфейс C.

Надеюсь, это поможет!

person mevatron    schedule 04.06.2012