Commit 85e03bedb080127f5909d11fc93429aeed55de72

Authored by Josh Klontz
1 parent 9f15f251

templatized some functions

sdk/core/opencvutils.cpp
@@ -173,22 +173,6 @@ QString OpenCVUtils::elemToString(const Mat &m, int r, int c) @@ -173,22 +173,6 @@ QString OpenCVUtils::elemToString(const Mat &m, int r, int c)
173 return "?"; 173 return "?";
174 } 174 }
175 175
176 -float OpenCVUtils::elemToFloat(const Mat &m, int r, int c)  
177 -{  
178 - assert(m.channels() == 1);  
179 - switch (m.depth()) {  
180 - case CV_8U: return float(m.at<quint8>(r,c));  
181 - case CV_8S: return float(m.at<qint8>(r,c));  
182 - case CV_16U: return float(m.at<quint16>(r,c));  
183 - case CV_16S: return float(m.at<qint16>(r,c));  
184 - case CV_32S: return float(m.at<qint32>(r,c));  
185 - case CV_32F: return float(m.at<float>(r,c));  
186 - case CV_64F: return float(m.at<double>(r,c));  
187 - default: qFatal("Unknown matrix depth");  
188 - }  
189 - return 0;  
190 -}  
191 -  
192 QString OpenCVUtils::matrixToString(const Mat &m) 176 QString OpenCVUtils::matrixToString(const Mat &m)
193 { 177 {
194 QString result; 178 QString result;
@@ -225,18 +209,6 @@ QStringList OpenCVUtils::matrixToStringList(const Mat &amp;m) @@ -225,18 +209,6 @@ QStringList OpenCVUtils::matrixToStringList(const Mat &amp;m)
225 return results; 209 return results;
226 } 210 }
227 211
228 -QList<float> OpenCVUtils::matrixToVector(const Mat &m)  
229 -{  
230 - QList<float> results;  
231 - vector<Mat> mv;  
232 - split(m, mv);  
233 - foreach (const Mat &mc, mv)  
234 - for (int i=0; i<mc.rows; i++)  
235 - for (int j=0; j<mc.cols; j++)  
236 - results.append(elemToFloat(mc, i, j));  
237 - return results;  
238 -}  
239 -  
240 Point2f OpenCVUtils::toPoint(const QPointF &qPoint) 212 Point2f OpenCVUtils::toPoint(const QPointF &qPoint)
241 { 213 {
242 return Point2f(qPoint.x(), qPoint.y()); 214 return Point2f(qPoint.x(), qPoint.y());
sdk/core/opencvutils.h
@@ -40,10 +40,38 @@ namespace OpenCVUtils @@ -40,10 +40,38 @@ namespace OpenCVUtils
40 40
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);  
44 QString matrixToString(const cv::Mat &m); 43 QString matrixToString(const cv::Mat &m);
45 QStringList matrixToStringList(const cv::Mat &m); 44 QStringList matrixToStringList(const cv::Mat &m);
46 - QList<float> matrixToVector(const cv::Mat &m); 45 +
  46 + template <typename T>
  47 + T getElement(const cv::Mat &m, int r, int c)
  48 + {
  49 + assert(m.channels() == 1);
  50 + switch (m.depth()) {
  51 + case CV_8U: return T(m.at<quint8>(r,c));
  52 + case CV_8S: return T(m.at<qint8>(r,c));
  53 + case CV_16U: return T(m.at<quint16>(r,c));
  54 + case CV_16S: return T(m.at<qint16>(r,c));
  55 + case CV_32S: return T(m.at<qint32>(r,c));
  56 + case CV_32F: return T(m.at<float>(r,c));
  57 + case CV_64F: return T(m.at<double>(r,c));
  58 + default: qFatal("Unknown matrix depth!");
  59 + }
  60 + return 0;
  61 + }
  62 +
  63 + template <typename T>
  64 + QList<T> matrixToVector(const cv::Mat &m)
  65 + {
  66 + QList<T> results;
  67 + std::vector<cv::Mat> mv;
  68 + cv::split(m, mv);
  69 + foreach (const cv::Mat &mc, mv)
  70 + for (int i=0; i<mc.rows; i++)
  71 + for (int j=0; j<mc.cols; j++)
  72 + results.append(getElement<float>(mc, i, j));
  73 + return results;
  74 + }
47 75
48 // Conversions 76 // Conversions
49 cv::Point2f toPoint(const QPointF &qPoint); 77 cv::Point2f toPoint(const QPointF &qPoint);
sdk/plugins/hist.cpp
@@ -111,7 +111,7 @@ class RankTransform : public UntrainableTransform @@ -111,7 +111,7 @@ class RankTransform : public UntrainableTransform
111 assert(m.channels() == 1); 111 assert(m.channels() == 1);
112 dst = Mat(m.rows, m.cols, CV_32FC1); 112 dst = Mat(m.rows, m.cols, CV_32FC1);
113 typedef QPair<float,int> Tuple; 113 typedef QPair<float,int> Tuple;
114 - QList<Tuple> tuples = Common::Sort(OpenCVUtils::matrixToVector(m)); 114 + QList<Tuple> tuples = Common::Sort(OpenCVUtils::matrixToVector<float>(m));
115 115
116 float prevValue = 0; 116 float prevValue = 0;
117 int prevRank = 0; 117 int prevRank = 0;
sdk/plugins/output.cpp
@@ -176,7 +176,7 @@ class rrOutput : public MatrixOutput @@ -176,7 +176,7 @@ class rrOutput : public MatrixOutput
176 if (!byLine) files.append(queryFiles[i]); 176 if (!byLine) files.append(queryFiles[i]);
177 177
178 typedef QPair<float,int> Pair; 178 typedef QPair<float,int> Pair;
179 - foreach (const Pair &pair, Common::Sort(OpenCVUtils::matrixToVector(data.row(i)), true, limit)) { 179 + foreach (const Pair &pair, Common::Sort(OpenCVUtils::matrixToVector<float>(data.row(i)), true, limit)) {
180 if (pair.first < threshold) break; 180 if (pair.first < threshold) break;
181 File target = targetFiles[pair.second]; 181 File target = targetFiles[pair.second];
182 target.set("Score", QString::number(pair.first)); 182 target.set("Score", QString::number(pair.first));
@@ -278,7 +278,7 @@ class rankOutput : public MatrixOutput @@ -278,7 +278,7 @@ class rankOutput : public MatrixOutput
278 for (int i=0; i<queryFiles.size(); i++) { 278 for (int i=0; i<queryFiles.size(); i++) {
279 typedef QPair<float,int> Pair; 279 typedef QPair<float,int> Pair;
280 int rank = 1; 280 int rank = 1;
281 - foreach (const Pair &pair, Common::Sort(OpenCVUtils::matrixToVector(data.row(i)), true)) { 281 + foreach (const Pair &pair, Common::Sort(OpenCVUtils::matrixToVector<float>(data.row(i)), true)) {
282 if(targetFiles[pair.second].get<QString>("Label") == queryFiles[i].get<QString>("Label")) { 282 if(targetFiles[pair.second].get<QString>("Label") == queryFiles[i].get<QString>("Label")) {
283 ranks.append(rank); 283 ranks.append(rank);
284 positions.append(pair.second); 284 positions.append(pair.second);