1

OpenCVIplImageを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);
4

1 に答える 1

1

これは、OpenCVのネイティブBGR色空間に関連する問題である可能性があります。使用しているOpenCVのバージョンについては言及していませんが、最新バージョンではcvCvtColorCV_BGR2RGBでの使用が定義されています。おそらくこのような変換を行う

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

その別のオプションを使用できない場合は、cvSplitを使用してチャネルを分離して並べ替えてから、cvMergeと組み合わせます。

ちなみに、メモリ管理がはるかに簡単で、Cインターフェイスよりも多くの機能を備えているため、C++インターフェイスを使用することを強くお勧めします。

お役に立てば幸いです。

于 2012-06-04T14:38:12.203 に答える