Commit adab506f78f90b59dbe843745998799669c9b92b

Authored by Josh Klontz
2 parents 10160b94 f74da8dd

Merge branch 'master' into kde

sdk/core/opencvutils.cpp
@@ -169,6 +169,30 @@ float OpenCVUtils::elemToFloat(const Mat &m, int r, int c) @@ -169,6 +169,30 @@ float OpenCVUtils::elemToFloat(const Mat &m, int r, int c)
169 return 0; 169 return 0;
170 } 170 }
171 171
  172 +QString OpenCVUtils::matrixToString(const Mat &m)
  173 +{
  174 + QString result;
  175 + vector<Mat> mv;
  176 + split(m, mv);
  177 + if (m.rows > 1) result += "{ ";
  178 + for (int r=0; r<m.rows; r++) {
  179 + if ((m.rows > 1) && (r > 0)) result += " ";
  180 + if (m.cols > 1) result += "[";
  181 + for (int c=0; c<m.cols; c++) {
  182 + if (mv.size() > 1) result += "(";
  183 + for (unsigned int i=0; i<mv.size()-1; i++)
  184 + result += OpenCVUtils::elemToString(mv[i], r, c) + ", ";
  185 + result += OpenCVUtils::elemToString(mv[mv.size()-1], r, c);
  186 + if (mv.size() > 1) result += ")";
  187 + if (c < m.cols - 1) result += ", ";
  188 + }
  189 + if (m.cols > 1) result += "]";
  190 + if (r < m.rows-1) result += "\n";
  191 + }
  192 + if (m.rows > 1) result += " }";
  193 + return result;
  194 +}
  195 +
172 QStringList OpenCVUtils::matrixToStringList(const Mat &m) 196 QStringList OpenCVUtils::matrixToStringList(const Mat &m)
173 { 197 {
174 QStringList results; 198 QStringList results;
@@ -285,25 +309,8 @@ QDataStream &amp;operator&gt;&gt;(QDataStream &amp;stream, Mat &amp;m) @@ -285,25 +309,8 @@ QDataStream &amp;operator&gt;&gt;(QDataStream &amp;stream, Mat &amp;m)
285 309
286 QDebug operator<<(QDebug dbg, const Mat &m) 310 QDebug operator<<(QDebug dbg, const Mat &m)
287 { 311 {
288 - vector<Mat> mv;  
289 - split(m, mv);  
290 - if (m.rows > 1) dbg.nospace() << "{ ";  
291 - for (int r=0; r<m.rows; r++) {  
292 - if ((m.rows > 1) && (r > 0)) dbg.nospace() << " ";  
293 - if (m.cols > 1) dbg.nospace() << "[";  
294 - for (int c=0; c<m.cols; c++) {  
295 - if (mv.size() > 1) dbg.nospace() << "(";  
296 - for (unsigned int i=0; i<mv.size()-1; i++)  
297 - dbg.nospace() << qPrintable(OpenCVUtils::elemToString(mv[i], r, c)) << ", ";  
298 - dbg.nospace() << qPrintable(OpenCVUtils::elemToString(mv[mv.size()-1], r, c));  
299 - if (mv.size() > 1) dbg.nospace() << ")";  
300 - if (c < m.cols - 1) dbg.nospace() << ", ";  
301 - }  
302 - if (m.cols > 1) dbg.nospace() << "]";  
303 - if (r < m.rows-1) dbg.nospace() << "\n";  
304 - }  
305 - if (m.rows > 1) dbg.nospace() << " }";  
306 - return dbg; 312 + dbg.nospace() << OpenCVUtils::matrixToString(m);
  313 + return dbg.space();
307 } 314 }
308 315
309 QDebug operator<<(QDebug dbg, const Point &p) 316 QDebug operator<<(QDebug dbg, const Point &p)
sdk/core/opencvutils.h
@@ -41,6 +41,7 @@ namespace OpenCVUtils @@ -41,6 +41,7 @@ namespace OpenCVUtils
41 // From image 41 // From image
42 QString elemToString(const cv::Mat &m, int r, int c); 42 QString elemToString(const cv::Mat &m, int r, int c);
43 float elemToFloat(const cv::Mat &m, int r, int c); 43 float elemToFloat(const cv::Mat &m, int r, int c);
  44 + QString matrixToString(const cv::Mat &m);
44 QStringList matrixToStringList(const cv::Mat &m); 45 QStringList matrixToStringList(const cv::Mat &m);
45 QList<float> matrixToVector(const cv::Mat &m); 46 QList<float> matrixToVector(const cv::Mat &m);
46 47
sdk/plugins/misc.cpp
@@ -99,13 +99,17 @@ class PrintTransform : public UntrainableMetaTransform @@ -99,13 +99,17 @@ class PrintTransform : public UntrainableMetaTransform
99 { 99 {
100 Q_OBJECT 100 Q_OBJECT
101 Q_PROPERTY(bool error READ get_error WRITE set_error RESET reset_error) 101 Q_PROPERTY(bool error READ get_error WRITE set_error RESET reset_error)
  102 + Q_PROPERTY(bool data READ get_data WRITE set_data RESET reset_data)
102 BR_PROPERTY(bool, error, false) 103 BR_PROPERTY(bool, error, false)
  104 + BR_PROPERTY(bool, data, false)
103 105
104 void project(const Template &src, Template &dst) const 106 void project(const Template &src, Template &dst) const
105 { 107 {
106 dst = src; 108 dst = src;
107 - if (error) qDebug("%s\n", qPrintable(src.file.flat()));  
108 - else printf("%s\n", qPrintable(src.file.flat())); 109 + const QString nameString = src.file.flat();
  110 + const QString dataString = data ? OpenCVUtils::matrixToString(src)+"\n" : QString();
  111 + if (error) qDebug("%s\n%s", qPrintable(nameString), qPrintable(dataString));
  112 + else printf("%s\n%s", qPrintable(nameString), qPrintable(dataString));
109 } 113 }
110 }; 114 };
111 115
@@ -113,6 +117,32 @@ BR_REGISTER(Transform, PrintTransform) @@ -113,6 +117,32 @@ BR_REGISTER(Transform, PrintTransform)
113 117
114 /*! 118 /*!
115 * \ingroup transforms 119 * \ingroup transforms
  120 + * \brief Checks the template for NaN values.
  121 + * \author Josh Klontz \cite jklontz
  122 + */
  123 +class CheckTransform : public UntrainableMetaTransform
  124 +{
  125 + Q_OBJECT
  126 +
  127 + void project(const Template &src, Template &dst) const
  128 + {
  129 + dst = src;
  130 + foreach (const Mat &m, src) {
  131 + Mat fm;
  132 + m.convertTo(fm, CV_32F);
  133 + const int elements = fm.rows * fm.cols * fm.channels();
  134 + const float *data = (const float*)fm.data;
  135 + for (int i=0; i<elements; i++)
  136 + if (data[i] != data[i])
  137 + qFatal("%s NaN check failed!", qPrintable(src.file.flat()));
  138 + }
  139 + }
  140 +};
  141 +
  142 +BR_REGISTER(Transform, CheckTransform)
  143 +
  144 +/*!
  145 + * \ingroup transforms
116 * \brief Sets the template's matrix data to the br::File::name. 146 * \brief Sets the template's matrix data to the br::File::name.
117 * \author Josh Klontz \cite jklontz 147 * \author Josh Klontz \cite jklontz
118 */ 148 */