每个人,我有一个问题想问你。
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());