diff --git a/openbr/core/opencvutils.cpp b/openbr/core/opencvutils.cpp index 2630724..fb5622c 100644 --- a/openbr/core/opencvutils.cpp +++ b/openbr/core/opencvutils.cpp @@ -157,6 +157,26 @@ Mat OpenCVUtils::toMatByRow(const QList &src) return dst; } +QString OpenCVUtils::depthToString(const Mat &m) +{ + switch (m.depth()) { + case CV_8U: return "8U"; + case CV_8S: return "8S"; + case CV_16U: return "16U"; + case CV_16S: return "16S"; + case CV_32S: return "32S"; + case CV_32F: return "32F"; + case CV_64F: return "64F"; + default: qFatal("Unknown matrix depth!"); + } + return "?"; +} + +QString OpenCVUtils::typeToString(const cv::Mat &m) +{ + return depthToString(m) + "C" + QString::number(m.channels()); +} + QString OpenCVUtils::elemToString(const Mat &m, int r, int c) { assert(m.channels() == 1); diff --git a/openbr/core/opencvutils.h b/openbr/core/opencvutils.h index 72ac9c7..ecf6067 100644 --- a/openbr/core/opencvutils.h +++ b/openbr/core/opencvutils.h @@ -39,6 +39,8 @@ namespace OpenCVUtils cv::Mat toMatByRow(const QList &src); // Data organized one row per row // From image + QString depthToString(const cv::Mat &m); + QString typeToString(const cv::Mat &m); QString elemToString(const cv::Mat &m, int r, int c); QString matrixToString(const cv::Mat &m); QStringList matrixToStringList(const cv::Mat &m); diff --git a/openbr/plugins/algorithms.cpp b/openbr/plugins/algorithms.cpp index 67429a9..fb53e95 100644 --- a/openbr/plugins/algorithms.cpp +++ b/openbr/plugins/algorithms.cpp @@ -50,7 +50,7 @@ class AlgorithmsInitializer : public Initializer Globals->abbreviations.insert("SmallSIFT", "Open+LimitSize(512)+KeyPointDetector(SIFT)+KeyPointDescriptor(SIFT):KeyPointMatcher(BruteForce)"); Globals->abbreviations.insert("SmallSURF", "Open+LimitSize(512)+KeyPointDetector(SURF)+KeyPointDescriptor(SURF):KeyPointMatcher(BruteForce)"); Globals->abbreviations.insert("ColorHist", "Open+LimitSize(512)!EnsureChannels(3)+SplitChannels+Hist(256,0,8)+Cat+Normalize(L1):L2"); - Globals->abbreviations.insert("ImageClassification", "Open+LimitSize(128)+Cvt(Gray)+Gradient+Bin(0,360,9,true)+Merge+Integral+RecursiveIntegralSampler(4,2,8,Singleton(KMeans(1024)))+Cat+CvtFloat+Hist(1024):Dist(L1)"); + Globals->abbreviations.insert("ImageClassification", "Open+CropSquare+LimitSize(256)+Cvt(Gray)+Gradient+Bin(0,360,9,true)+Merge+Integral+RecursiveIntegralSampler(4,2,8,Singleton(KMeans(1024)[fraction=0.2]))+Cat+Print+CvtFloat+Hist(1024):Dist(L1)"); // Hash Globals->abbreviations.insert("FileName", "Name+Identity:Identical"); diff --git a/openbr/plugins/misc.cpp b/openbr/plugins/misc.cpp index 0cfc155..b1c0b10 100644 --- a/openbr/plugins/misc.cpp +++ b/openbr/plugins/misc.cpp @@ -68,8 +68,10 @@ class PrintTransform : public UntrainableMetaTransform dst = src; const QString nameString = src.file.flat(); const QString dataString = data ? OpenCVUtils::matrixToString(src)+"\n" : QString(); - if (error) qDebug("%s\n%s", qPrintable(nameString), qPrintable(dataString)); - else printf("%s\n%s", qPrintable(nameString), qPrintable(dataString)); + QStringList matricies; + foreach (const Mat &m, src) + matricies.append(QString::number(m.rows) + "x" + QString::number(m.cols) + "_" + OpenCVUtils::typeToString(m)); + fprintf(error ? stderr : stdout, "%s\n %s\n%s", qPrintable(nameString), qPrintable(matricies.join(",")), qPrintable(dataString)); } };