From 57dec696cf6161a1c5a803337aa7b7b3eb8dc29d Mon Sep 17 00:00:00 2001 From: matlabbe Date: Thu, 20 Nov 2014 16:20:21 +0000 Subject: [PATCH] fixed not uncompressed depth2D when restarting rtabmap with a prebuilt map for icp constraints git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@2053 f169173b-cf89-36c8-b27e-44dbe73f0c83 --- corelib/include/rtabmap/core/Signature.h | 3 ++- corelib/src/Signature.cpp | 19 ++++++++++++++++++- guilib/src/MainWindow.cpp | 4 ++-- guilib/src/PdfPlot.cpp | 13 ++++++++----- 4 files changed, 30 insertions(+), 9 deletions(-) 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); + } } }