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,7 +88,7 @@ BR_REGISTER(Format, videoFormat)
88 /*! 88 /*!
89 * \ingroup formats 89 * \ingroup formats
90 * \brief A simple binary matrix format. 90 * \brief A simple binary matrix format.
91 - * \author Josh Klonyz \cite jklontz 91 + * \author Josh Klontz \cite jklontz
92 * First 4 bytes indicate the number of rows. 92 * First 4 bytes indicate the number of rows.
93 * Second 4 bytes indicate the number of columns. 93 * Second 4 bytes indicate the number of columns.
94 * The rest of the bytes are 32-bit floating data elements in row-major order. 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,28 +96,39 @@ BR_REGISTER(Format, videoFormat)
96 class binFormat : public Format 96 class binFormat : public Format
97 { 97 {
98 Q_OBJECT 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 Template read() const 102 Template read() const
101 { 103 {
102 QByteArray data; 104 QByteArray data;
103 QtUtils::readFile(file, data); 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 void write(const Template &t) const 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 QByteArray data; 118 QByteArray data;
117 QDataStream stream(&data, QFile::WriteOnly); 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 QtUtils::writeFile(file, data); 133 QtUtils::writeFile(file, data);
123 } 134 }