如何正确地将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);
答案 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接口更多的功能。
希望有所帮助!