2012-06-04 48 views
1

如何正确地将OpenCV IplImage转换为OpenSceneGraph的osg :: Image?将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

这可能是涉及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接口更多的功能。

希望有帮助!

+0

谢谢。 cvCvtColor(pImg,pImg,CV_BGR2RGB);成功了! – coder9