diff --git a/Train3DMASCDialog.ui b/Train3DMASCDialog.ui
index cbc8fa7..7678cb4 100644
--- a/Train3DMASCDialog.ui
+++ b/Train3DMASCDialog.ui
@@ -7,7 +7,7 @@
0
0
400
- 500
+ 550
@@ -228,6 +228,13 @@
+ -
+
+
+ export
+
+
+
diff --git a/q3DMASCClassifier.cpp b/q3DMASCClassifier.cpp
index 4d5f675..9260bb5 100644
--- a/q3DMASCClassifier.cpp
+++ b/q3DMASCClassifier.cpp
@@ -207,7 +207,8 @@ bool Classifier::classify( const Feature::Source::Set& featureSources,
catch (const cv::Exception& cvex)
{
errorMessage = cvex.msg.c_str();
- return false;
+ success = false;
+ break;
}
for (int fIndex = 0; fIndex < attributesPerSample; ++fIndex)
diff --git a/qTrain3DMASCDialog.cpp b/qTrain3DMASCDialog.cpp
index e118739..7381248 100644
--- a/qTrain3DMASCDialog.cpp
+++ b/qTrain3DMASCDialog.cpp
@@ -20,6 +20,9 @@
//Qt
#include
#include
+#include
+#include
+#include
//System
#include
@@ -36,6 +39,7 @@ Train3DMASCDialog::Train3DMASCDialog(QWidget* parent/*=nullptr*/)
connect(closePushButton, SIGNAL(clicked()), this, SLOT(onClose()));
connect(savePushButton, SIGNAL(clicked()), this, SLOT(onSave()));
+ connect(exportToolButton, SIGNAL(clicked()), this, SLOT(onExportResults()));
}
void Train3DMASCDialog::clearResults()
@@ -96,7 +100,7 @@ void Train3DMASCDialog::setFeatureImportance(QString featureName, float importan
{
if (tableWidget->item(index, 0)->text() == featureName)
{
- QTableWidgetItem* item = tableWidget->item(static_cast(index), FeatureImportanceColumn);
+ QTableWidgetItem* item = tableWidget->item(index, FeatureImportanceColumn);
item->setText(std::isnan(importance) ? QString() : QString::number(importance, 'f', 6));
return;
}
@@ -118,3 +122,35 @@ void Train3DMASCDialog::onSave()
saveRequested = true;
accept();
}
+
+void Train3DMASCDialog::onExportResults()
+{
+ QSettings settings;
+ settings.beginGroup("3DMASC");
+ QString outputPath = settings.value("FilePath", QCoreApplication::applicationDirPath()).toString();
+ QString outputFilename = QFileDialog::getSaveFileName(this, "Export feature importance matrix", outputPath, "*.csv");
+ if (outputFilename.isNull())
+ {
+ //process cancelled by the user
+ return;
+ }
+ settings.setValue("FilePath", QFileInfo(outputFilename).absolutePath());
+ settings.endGroup();
+
+ //save the file
+ QFile file(outputFilename);
+ if (!file.open(QFile::WriteOnly | QFile::Text))
+ {
+ QMessageBox::critical(this, "Error", "Failed to open file for writing: " + outputFilename);
+ return;
+ }
+
+ QTextStream stream(&file);
+ stream << "Feature;Importance" << endl;
+ for (int index = 0; index < tableWidget->rowCount(); ++index)
+ {
+ QString featureName = tableWidget->item(index, 0)->text();
+ QString importance = tableWidget->item(index, FeatureImportanceColumn)->text();
+ stream << featureName << ";" << importance << endl;
+ }
+}
\ No newline at end of file
diff --git a/qTrain3DMASCDialog.h b/qTrain3DMASCDialog.h
index 7d2fb24..c777890 100644
--- a/qTrain3DMASCDialog.h
+++ b/qTrain3DMASCDialog.h
@@ -53,6 +53,7 @@ protected slots:
void onClose();
void onSave();
+ void onExportResults();
protected: //members