Commit 25b253ca77aea05751a5100b1bfc492fe709581a
1 parent
548393e7
improved binFormat
Showing
1 changed file
with
23 additions
and
12 deletions
openbr/plugins/format.cpp
| ... | ... | @@ -88,7 +88,7 @@ BR_REGISTER(Format, videoFormat) |
| 88 | 88 | /*! |
| 89 | 89 | * \ingroup formats |
| 90 | 90 | * \brief A simple binary matrix format. |
| 91 | - * \author Josh Klonyz \cite jklontz | |
| 91 | + * \author Josh Klontz \cite jklontz | |
| 92 | 92 | * First 4 bytes indicate the number of rows. |
| 93 | 93 | * Second 4 bytes indicate the number of columns. |
| 94 | 94 | * The rest of the bytes are 32-bit floating data elements in row-major order. |
| ... | ... | @@ -96,28 +96,39 @@ BR_REGISTER(Format, videoFormat) |
| 96 | 96 | class binFormat : public Format |
| 97 | 97 | { |
| 98 | 98 | Q_OBJECT |
| 99 | + Q_PROPERTY(bool raw READ get_raw WRITE set_raw RESET reset_raw STORED false) | |
| 100 | + BR_PROPERTY(bool, raw, false) | |
| 99 | 101 | |
| 100 | 102 | Template read() const |
| 101 | 103 | { |
| 102 | 104 | QByteArray data; |
| 103 | 105 | QtUtils::readFile(file, data); |
| 104 | - return Template(file, Mat(((quint32*)data.data())[0], | |
| 105 | - ((quint32*)data.data())[1], | |
| 106 | - CV_32FC1, | |
| 107 | - data.data()+8).clone()); | |
| 106 | + if (raw) { | |
| 107 | + return Template(file, Mat(1, data.size(), CV_8UC1, data.data()).clone()); | |
| 108 | + } else { | |
| 109 | + return Template(file, Mat(((quint32*)data.data())[0], | |
| 110 | + ((quint32*)data.data())[1], | |
| 111 | + CV_32FC1, | |
| 112 | + data.data()+8).clone()); | |
| 113 | + } | |
| 108 | 114 | } |
| 109 | 115 | |
| 110 | 116 | void write(const Template &t) const |
| 111 | 117 | { |
| 112 | - Mat m; | |
| 113 | - t.m().convertTo(m, CV_32F); | |
| 114 | - if (m.channels() != 1) qFatal("Only supports single channel matrices."); | |
| 115 | - | |
| 116 | 118 | QByteArray data; |
| 117 | 119 | QDataStream stream(&data, QFile::WriteOnly); |
| 118 | - stream.writeRawData((const char*)&m.rows, 4); | |
| 119 | - stream.writeRawData((const char*)&m.cols, 4); | |
| 120 | - stream.writeRawData((const char*)m.data, 4*m.rows*m.cols); | |
| 120 | + if (raw) { | |
| 121 | + const Mat &m = t; | |
| 122 | + stream.writeRawData((const char*)m.data, m.total()*m.elemSize()); | |
| 123 | + } else { | |
| 124 | + Mat m; | |
| 125 | + t.m().convertTo(m, CV_32F); | |
| 126 | + if (m.channels() != 1) qFatal("Only supports single channel matrices."); | |
| 127 | + | |
| 128 | + stream.writeRawData((const char*)&m.rows, 4); | |
| 129 | + stream.writeRawData((const char*)&m.cols, 4); | |
| 130 | + stream.writeRawData((const char*)m.data, 4*m.rows*m.cols); | |
| 131 | + } | |
| 121 | 132 | |
| 122 | 133 | QtUtils::writeFile(file, data); |
| 123 | 134 | } | ... | ... |