Opencv 将IplImage转换为osg::Image

Opencv 将IplImage转换为osg::Image,opencv,openscenegraph,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,cv

如何将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);
//IplImage*cvImg是使用cvQueryFrame(捕获)捕获的网络摄像头输出图像
osg::ref_ptr osgImage=新osg::Image;
osgImage->setImage(cvImg->width,cvImg->height,3,
GL_RGB,GL_RGB,GL_无符号字节,
(字节*)(cvImg->imageData),
osg::Image::AllocationMode::NO_DELETE,1);

这可能是一个涉及OpenCV本机BGR颜色空间的问题。您没有提到您正在使用哪个版本的OpenCV,但现代版本定义了要与一起使用的
CV\u BGR2RGB
。可能像这样做转换

IplImage* pImg = cvLoadImage("lines.jpg", CV_LOAD_IMAGE_COLOR);
cvCvtColor(pImg, pImg, CV_BGR2RGB);
cvReleaseImage(&pImg);
如果不能使用该选项,另一个选项将用于分离和重新排列通道,然后将它们与组合

在一个侧面注释中,我绝对推荐使用C++接口,因为它比内存管理更容易,并且比C接口具有更多的特性。


希望有帮助

这可能是一个涉及OpenCV本机BGR颜色空间的问题。您没有提到您正在使用哪个版本的OpenCV,但现代版本定义了要与一起使用的
CV\u BGR2RGB
。可能像这样做转换

IplImage* pImg = cvLoadImage("lines.jpg", CV_LOAD_IMAGE_COLOR);
cvCvtColor(pImg, pImg, CV_BGR2RGB);
cvReleaseImage(&pImg);
如果不能使用该选项,另一个选项将用于分离和重新排列通道,然后将它们与组合

在一个侧面注释中,我绝对推荐使用C++接口,因为它比内存管理更容易,并且比C接口具有更多的特性。 希望有帮助