Commit 25b253ca77aea05751a5100b1bfc492fe709581a

Authored by Josh Klontz
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 }
... ...