mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 00:37:46 +08:00
DatabaseViewer: reading database on hard drive for each image instead of loading the whole database in RAM.
git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@1064 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
@@ -73,8 +73,6 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Ui_DatabaseViewer * ui_;
|
Ui_DatabaseViewer * ui_;
|
||||||
QMap<int, QByteArray> imagesMap_;
|
|
||||||
QMap<int, QByteArray> depthImagesMap_;
|
|
||||||
QList<int> ids_;
|
QList<int> ids_;
|
||||||
rtabmap::Memory * memory_;
|
rtabmap::Memory * memory_;
|
||||||
QString pathDatabase_;
|
QString pathDatabase_;
|
||||||
|
|||||||
@@ -103,8 +103,6 @@ bool DatabaseViewer::openDatabase(const QString & path)
|
|||||||
{
|
{
|
||||||
delete memory_;
|
delete memory_;
|
||||||
memory_ = 0;
|
memory_ = 0;
|
||||||
imagesMap_.clear();
|
|
||||||
depthImagesMap_.clear();
|
|
||||||
ids_.clear();
|
ids_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,9 +110,9 @@ bool DatabaseViewer::openDatabase(const QString & path)
|
|||||||
rtabmap::ParametersMap parameters;
|
rtabmap::ParametersMap parameters;
|
||||||
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kDbSqlite3InMemory(), "false"));
|
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kDbSqlite3InMemory(), "false"));
|
||||||
|
|
||||||
memory_ = new rtabmap::Memory(parameters);
|
memory_ = new rtabmap::Memory();
|
||||||
|
|
||||||
if(!memory_->init(path.toStdString()))
|
if(!memory_->init(path.toStdString(), false, parameters))
|
||||||
{
|
{
|
||||||
QMessageBox::warning(this, "Database error", tr("Can't open database \"%1\"").arg(path));
|
QMessageBox::warning(this, "Database error", tr("Can't open database \"%1\"").arg(path));
|
||||||
}
|
}
|
||||||
@@ -357,10 +355,6 @@ void DatabaseViewer::update(int value,
|
|||||||
//image
|
//image
|
||||||
QImage img;
|
QImage img;
|
||||||
QImage imgDepth;
|
QImage imgDepth;
|
||||||
QMap<int, QByteArray>::iterator iter = imagesMap_.find(id);
|
|
||||||
QMap<int, QByteArray>::iterator iterDepth = depthImagesMap_.find(id);
|
|
||||||
if(iter == imagesMap_.end())
|
|
||||||
{
|
|
||||||
if(memory_)
|
if(memory_)
|
||||||
{
|
{
|
||||||
std::vector<unsigned char> image, depth, depth2d;
|
std::vector<unsigned char> image, depth, depth2d;
|
||||||
@@ -376,35 +370,10 @@ void DatabaseViewer::update(int value,
|
|||||||
if(!image.empty())
|
if(!image.empty())
|
||||||
{
|
{
|
||||||
img = uCvMat2QImage(imageMat);
|
img = uCvMat2QImage(imageMat);
|
||||||
if(!img.isNull())
|
|
||||||
{
|
|
||||||
QByteArray ba;
|
|
||||||
QBuffer buffer(&ba);
|
|
||||||
buffer.open(QIODevice::WriteOnly);
|
|
||||||
img.save(&buffer, "BMP"); // writes image into ba in BMP format
|
|
||||||
imagesMap_.insert(id, ba);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(!depth.empty())
|
if(!depth.empty())
|
||||||
{
|
{
|
||||||
imgDepth = uCvMat2QImage(depthMat);
|
imgDepth = uCvMat2QImage(depthMat);
|
||||||
if(!imgDepth.isNull())
|
|
||||||
{
|
|
||||||
QByteArray ba;
|
|
||||||
QBuffer buffer(&ba);
|
|
||||||
buffer.open(QIODevice::WriteOnly);
|
|
||||||
QPixmap::fromImage(imgDepth).save(&buffer, "PGM"); // writes image into ba in PGM format
|
|
||||||
depthImagesMap_.insert(id, ba);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
img.loadFromData(iter.value(), "BMP");
|
|
||||||
if(iterDepth != depthImagesMap_.end())
|
|
||||||
{
|
|
||||||
imgDepth.loadFromData(iterDepth.value(), "PGM");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user