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 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 176 QString OpenCVUtils::matrixToString(const Mat &m)
193 177 {
194 178 QString result;
... ... @@ -225,18 +209,6 @@ QStringList OpenCVUtils::matrixToStringList(const Mat &amp;m)
225 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 212 Point2f OpenCVUtils::toPoint(const QPointF &qPoint)
241 213 {
242 214 return Point2f(qPoint.x(), qPoint.y());
... ...
sdk/core/opencvutils.h
... ... @@ -40,10 +40,38 @@ namespace OpenCVUtils
40 40  
41 41 // From image
42 42 QString elemToString(const cv::Mat &m, int r, int c);
43   - float elemToFloat(const cv::Mat &m, int r, int c);
44 43 QString matrixToString(const cv::Mat &m);
45 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 76 // Conversions
49 77 cv::Point2f toPoint(const QPointF &qPoint);
... ...
sdk/plugins/hist.cpp
... ... @@ -111,7 +111,7 @@ class RankTransform : public UntrainableTransform
111 111 assert(m.channels() == 1);
112 112 dst = Mat(m.rows, m.cols, CV_32FC1);
113 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 116 float prevValue = 0;
117 117 int prevRank = 0;
... ...
sdk/plugins/output.cpp
... ... @@ -176,7 +176,7 @@ class rrOutput : public MatrixOutput
176 176 if (!byLine) files.append(queryFiles[i]);
177 177  
178 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 180 if (pair.first < threshold) break;
181 181 File target = targetFiles[pair.second];
182 182 target.set("Score", QString::number(pair.first));
... ... @@ -278,7 +278,7 @@ class rankOutput : public MatrixOutput
278 278 for (int i=0; i<queryFiles.size(); i++) {
279 279 typedef QPair<float,int> Pair;
280 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 282 if(targetFiles[pair.second].get<QString>("Label") == queryFiles[i].get<QString>("Label")) {
283 283 ranks.append(rank);
284 284 positions.append(pair.second);
... ...