как преобразовать osg :: image в cv :: mat и в string, а затем, когда я хочу использовать это изображение, могу ли я преобразовать строку в cv :: mat в osg :: image - PullRequest
0 голосов
/ 17 ноября 2018

все, у меня есть вопрос, который хочу задать вам.

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

Тип finalImage - osg::image, но я хочу сохранить финал в rocksdb (это база данных KV), поэтому finalImage должен конвертироваться в string.when, я хочуиспользуйте этот 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());
...