From 8d288efed475d5037424ad8269c803159ebd5720 Mon Sep 17 00:00:00 2001 From: Josh Klontz Date: Tue, 15 Jan 2013 16:54:41 -0500 Subject: [PATCH] matFormat almost complete --- sdk/core/qtutils.cpp | 3 ++- sdk/core/qtutils.h | 1 - sdk/plugins/format.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 100 insertions(+), 12 deletions(-) diff --git a/sdk/core/qtutils.cpp b/sdk/core/qtutils.cpp index f546ea3..716f4ff 100644 --- a/sdk/core/qtutils.cpp +++ b/sdk/core/qtutils.cpp @@ -113,7 +113,8 @@ void QtUtils::writeFile(const QString &file, const QByteArray &data, int compres QFile f(file); touchDir(f); if (!f.open(QFile::WriteOnly)) qFatal("QtUtils::writeFile failed to open %s for writing.", qPrintable(file)); - f.write(qCompress(data, compression)); + if (compression == 0) f.write(data); + else f.write(qCompress(data, compression)); f.close(); } diff --git a/sdk/core/qtutils.h b/sdk/core/qtutils.h index a4ebe29..807ef43 100644 --- a/sdk/core/qtutils.h +++ b/sdk/core/qtutils.h @@ -18,7 +18,6 @@ #define __QTUTILS_H #include -#include #include #include #include diff --git a/sdk/plugins/format.cpp b/sdk/plugins/format.cpp index 26688c9..6c6ffd6 100644 --- a/sdk/plugins/format.cpp +++ b/sdk/plugins/format.cpp @@ -50,23 +50,20 @@ class csvFormat : public Format QList< QList > valsList; foreach (const QString &line, lines) { QList vals; - foreach (const QString &word, line.split(QRegExp(" *, *"))) { + foreach (const QString &word, line.split(QRegExp(" *, *"), QString::SkipEmptyParts)) { bool ok; const float val = word.toFloat(&ok); vals.append(val); isUChar = isUChar && (val == float(uchar(val))); } - valsList.append(vals); + if (!vals.isEmpty()) + valsList.append(vals); } - assert((valsList.size() > 0) && (valsList[0].size() > 0)); Mat m(valsList.size(), valsList[0].size(), CV_32FC1); - for (int i=0; i(i,j) = valsList[i][j]; - } - } if (isUChar) m.convertTo(m, CV_8U); return Template(m); @@ -218,8 +215,8 @@ class matFormat : public Format error |= (int(bytes) != stream.readRawData(data.data(), bytes)); // Alignment - int skipBytes = (bytes < 4) ? (4 - bytes) : 0; - if (skipBytes != 0) error |= (skipBytes != stream.skipRawData(skipBytes)); + int skipBytes = (bytes < 4) ? (4 - bytes) : (8 - bytes%8)%8; + if (skipBytes != 0) stream.skipRawData(skipBytes); if (error) qFatal("matFormat::Element Unexpected end of file."); } @@ -289,7 +286,98 @@ class matFormat : public Format void write(const Template &t) const { + QByteArray data; + QDataStream stream(&data, QFile::WriteOnly); + + { // Header + QByteArray header = "MATLAB 5.0 MAT-file; Made with OpenBR | www.openbiometrics.org\n"; + QByteArray buffer(116-header.size(), 0); + stream.writeRawData(header.data(), header.size()); + stream.writeRawData(buffer.data(), buffer.size()); + quint64 subsystem = 0; + quint16 version = 0x0100; + const char *endianness = "MI"; + stream.writeRawData((const char*)&subsystem, 8); + stream.writeRawData((const char*)&version, 2); + stream.writeRawData(endianness, 2); + } + + for (int i=0; i