From 17873bacfa2071f8062862345d0b0e976d15f844 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Tue, 20 May 2014 15:52:25 +0000 Subject: [PATCH] Don't update objects when a "changed" Feature2D or NearestNeighbor parameter is still the same (it happens when a parameter widget loses focus) to avoid unnecessary objects update git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@277 620bd6b2-0a58-f614-fd9a-1bd335dccda9 --- src/MainWindow.cpp | 26 +++++++++++++++----------- src/MainWindow.h | 1 + 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index d224ea48..497bc57a 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -88,6 +88,7 @@ MainWindow::MainWindow(Camera * camera, const QString & settings, QWidget * pare Settings::loadSettings(settings_, &geometry, &state); this->restoreGeometry(geometry); this->restoreState(state); + lastObjectsUpdateParameters_ = Settings::getParameters(); ui_->toolBox->setupUi(); connect((QDoubleSpinBox*)ui_->toolBox->getParameterWidget(Settings::kCamera_4imageRate()), @@ -915,6 +916,7 @@ void MainWindow::updateData() } this->statusBar()->clearMessage(); } + lastObjectsUpdateParameters_ = Settings::getParameters(); } void MainWindow::startProcessing() @@ -1720,24 +1722,26 @@ void MainWindow::update(const cv::Mat & image) void MainWindow::notifyParametersChanged(const QStringList & paramChanged) { - //Selective update (to not update all objects for a simple camera's parameter modification) bool detectorDescriptorParamsChanged = false; bool nearestNeighborParamsChanged = false; for(QStringList::const_iterator iter = paramChanged.begin(); iter!=paramChanged.end(); ++iter) { printf("Parameter changed: %s\n", iter->toStdString().c_str()); - if(!detectorDescriptorParamsChanged && iter->contains("Feature2D")) + if(lastObjectsUpdateParameters_.value(*iter) != Settings::getParameter(*iter)) { - detectorDescriptorParamsChanged = true; - } - else if(!nearestNeighborParamsChanged && - ( (iter->contains("NearestNeighbor") && Settings::getGeneral_invertedSearch()) || - iter->compare(Settings::kGeneral_invertedSearch()) == 0 || - (iter->compare(Settings::kGeneral_vocabularyIncremental()) == 0 && Settings::getGeneral_invertedSearch()) || - (iter->compare(Settings::kGeneral_threads()) == 0 && !Settings::getGeneral_invertedSearch()) )) - { - nearestNeighborParamsChanged = true; + if(!detectorDescriptorParamsChanged && iter->contains("Feature2D")) + { + detectorDescriptorParamsChanged = true; + } + else if(!nearestNeighborParamsChanged && + ( (iter->contains("NearestNeighbor") && Settings::getGeneral_invertedSearch()) || + iter->compare(Settings::kGeneral_invertedSearch()) == 0 || + (iter->compare(Settings::kGeneral_vocabularyIncremental()) == 0 && Settings::getGeneral_invertedSearch()) || + (iter->compare(Settings::kGeneral_threads()) == 0 && !Settings::getGeneral_invertedSearch()) )) + { + nearestNeighborParamsChanged = true; + } } if(iter->compare(Settings::kGeneral_port()) == 0 && diff --git a/src/MainWindow.h b/src/MainWindow.h index 171e98d4..dc16a022 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -104,6 +104,7 @@ private: bool objectsModified_; QMap imagesMap_; TcpServer * tcpServer_; + QMap lastObjectsUpdateParameters_; // ParametersMap }; #endif /* MainWindow_H_ */