2012-06-04 4 views
1

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

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

// 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); 

ответ

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.

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

+0

Спасибо. cvCvtColor (pImg, pImg, CV_BGR2RGB); работал! – coder9

Смежные вопросы