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
This commit is contained in:
matlabbe 2014-05-20 15:52:25 +00:00
parent e4ca56879c
commit 17873bacfa
2 changed files with 16 additions and 11 deletions

View File

@ -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 &&

View File

@ -104,6 +104,7 @@ private:
bool objectsModified_;
QMap<int, QByteArray> imagesMap_;
TcpServer * tcpServer_;
QMap<QString, QVariant> lastObjectsUpdateParameters_; // ParametersMap
};
#endif /* MainWindow_H_ */