将IplImage转换为osg :: Image

时间:2012-06-04 05:37:38

标签: opencv openscenegraph

如何正确地将OpenCV IplImage转换为OpenSceneGraph的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 个答案:

答案 0 :(得分:1)

这可能是涉及OpenCV原生BGR色彩空间的问题。您没有提到您正在使用的OpenCV版本,但现代版本定义CV_BGR2RGB以用于cvCvtColor。可能像这样进行转换

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

如果您无法使用其他选项,则可以使用cvSplit对频道进行分隔和重新排序,然后将其与cvMerge合并。

另外,我肯定会建议使用C ++接口,因为它更容易进行内存管理,并且具有比C接口更多的功能。

希望有所帮助!