如何将osg :: image转换为cv :: mat和字符串,然后,当我要使用此图像时,是否可以将字符串转换为cv :: mat转换为osg :: image

时间:2018-11-17 02:33:51

标签: c++ opencv openscenegraph

每个人,我有一个问题想问你。

osg::ref_ptr< osg::Image > finalImage =geoImage.getImage();

finalImage的类型为osg::image,但是我想将finalImage存储到rocksdb(这是一个KV数据库)中,所以finalImage必须转换为字符串。当我要使用finalImage时,我应该将此字符串转换为osg :: image。 所以大家,能给我一些建议!谢谢。 我使用opencv来执行此操作,但是失败。代码如下:

//osg::iamge convert to cv::mat to string
osg::image *finalImage = geoImage.getImage();
cv::Mat imgcv(finalImage ->t(), finalImage ->s(), CV_8UC3);
imgcv.data = (uchar*)finalImage ->data();
cv::flip(imgcv, imgcv, 0);
cv::cvtColor(imgcv, imgcv, CV_RGB2BGR);
cv::imshow("change window",imgcv);
std::string image_data(imgcv.begin(), imgcv.end<unsigned char>());

//string convert to cv::mat to osg::image
std::vector<uchar> vectordata(imageData.begin(), imageData.end());
cv::Mat data_mat(vectordata, true);
cv::Mat image(cv::imdecode(data_mat, 1));//put 0 if you want greyscale
cv::imshow("change window", data_mat);
osg::ref_ptr< osg::Image > cvImage = new osg::Image;
cvImage->setImage(data_mat.cols, data_mat.rows, 3, GL_BGR, GL_BGR, 
GL_UNSIGNED_BYTE, data_mat.data, osg::Image::NO_DELETE, 1);
osgDB::writeImageFile(*cvImage, "cvImage.jpg", _packager->getOptions());

0 个答案:

没有答案