diff --git a/corelib/include/rtabmap/core/Signature.h b/corelib/include/rtabmap/core/Signature.h index b5e52588..72035196 100644 --- a/corelib/include/rtabmap/core/Signature.h +++ b/corelib/include/rtabmap/core/Signature.h @@ -140,7 +140,8 @@ public: SensorData toSensorData(); void uncompressData(); - void uncompressData(cv::Mat * imageRaw, cv::Mat * depthRaw, cv::Mat * depth2DRaw) const; + void uncompressData(cv::Mat * imageRaw, cv::Mat * depthRaw, cv::Mat * depth2DRaw); + void uncompressDataConst(cv::Mat * imageRaw, cv::Mat * depthRaw, cv::Mat * depth2DRaw) const; private: int _id; diff --git a/corelib/src/Signature.cpp b/corelib/src/Signature.cpp index 3ce57b04..a84bf03c 100644 --- a/corelib/src/Signature.cpp +++ b/corelib/src/Signature.cpp @@ -247,7 +247,24 @@ void Signature::uncompressData() uncompressData(&_imageRaw, &_depthRaw, &_depth2DRaw); } -void Signature::uncompressData(cv::Mat * imageRaw, cv::Mat * depthRaw, cv::Mat * depth2DRaw) const +void Signature::uncompressData(cv::Mat * imageRaw, cv::Mat * depthRaw, cv::Mat * depth2DRaw) +{ + uncompressDataConst(imageRaw, depthRaw, depth2DRaw); + if(imageRaw && !imageRaw->empty() && _imageRaw.empty()) + { + _imageRaw = *imageRaw; + } + if(depthRaw && !depthRaw->empty() && _depthRaw.empty()) + { + _depthRaw = *depthRaw; + } + if(depth2DRaw && !depth2DRaw->empty() && _depth2DRaw.empty()) + { + _depth2DRaw = *depth2DRaw; + } +} + +void Signature::uncompressDataConst(cv::Mat * imageRaw, cv::Mat * depthRaw, cv::Mat * depth2DRaw) const { if(imageRaw) { diff --git a/guilib/src/MainWindow.cpp b/guilib/src/MainWindow.cpp index 3339b20b..b2cf7732 100644 --- a/guilib/src/MainWindow.cpp +++ b/guilib/src/MainWindow.cpp @@ -4294,7 +4294,7 @@ pcl::PointCloud::Ptr MainWindow::getAssembledCloud( { const Signature & s = _cachedSignatures.find(iter->first).value(); cv::Mat image, depth; - s.uncompressData(&image, &depth, 0); + s.uncompressDataConst(&image, &depth, 0); pcl::PointCloud::Ptr cloud; if(regenerateClouds) { @@ -4380,7 +4380,7 @@ std::map::Ptr > MainWindow::getClouds( { const Signature & s = _cachedSignatures.find(iter->first).value(); cv::Mat image, depth; - s.uncompressData(&image, &depth, 0); + s.uncompressDataConst(&image, &depth, 0); pcl::PointCloud::Ptr cloud; if(regenerateClouds) { diff --git a/guilib/src/PdfPlot.cpp b/guilib/src/PdfPlot.cpp index 98afcbb8..59630be8 100644 --- a/guilib/src/PdfPlot.cpp +++ b/guilib/src/PdfPlot.cpp @@ -73,11 +73,14 @@ void PdfPlotItem::showDescription(bool shown) if(iter != _signaturesRef->constEnd() && !iter.value().getImageCompressed().empty()) { cv::Mat image; - iter.value().uncompressData(&image, 0, 0); - img = uCvMat2QImage(iter.value().getImageRaw()); - QPixmap scaled = QPixmap::fromImage(img).scaledToWidth(128); - _img = new QGraphicsPixmapItem(scaled, this); - _img->setVisible(false); + iter.value().uncompressDataConst(&image, 0, 0); + if(!image.empty()) + { + img = uCvMat2QImage(image); + QPixmap scaled = QPixmap::fromImage(img).scaledToWidth(128); + _img = new QGraphicsPixmapItem(scaled, this); + _img->setVisible(false); + } } }