diff options
| author | Stéphane Lenclud <github@lenclud.com> | 2019-04-15 12:22:05 +0200 | 
|---|---|---|
| committer | Stéphane Lenclud <github@lenclud.com> | 2019-04-24 18:46:12 +0200 | 
| commit | 6ca96478ea4d8e6ba71ebf41a1f7d904f2c3df5d (patch) | |
| tree | 85810bc2463bb5786817830cab89cd19c9241325 | |
| parent | 9830011866f0817d08c3e3f0bd26e98e54c523e7 (diff) | |
Easy Tracker: Removing point extractor interface. Using cv::Point instead of vec2.
| -rw-r--r-- | tracker-easy/module.cpp | 4 | ||||
| -rw-r--r-- | tracker-easy/point-extractor.cpp | 14 | ||||
| -rw-r--r-- | tracker-easy/point-extractor.h | 13 | ||||
| -rw-r--r-- | tracker-easy/preview.cpp | 13 | ||||
| -rw-r--r-- | tracker-easy/preview.h | 4 | ||||
| -rw-r--r-- | tracker-easy/tracker-easy-api.h | 37 | ||||
| -rw-r--r-- | tracker-easy/tracker-easy-dialog.h | 3 | ||||
| -rw-r--r-- | tracker-easy/tracker-easy.cpp | 20 | ||||
| -rw-r--r-- | tracker-easy/tracker-easy.h | 8 | 
9 files changed, 35 insertions, 81 deletions
| diff --git a/tracker-easy/module.cpp b/tracker-easy/module.cpp index b7b60fa8..9f5461d5 100644 --- a/tracker-easy/module.cpp +++ b/tracker-easy/module.cpp @@ -1,13 +1,9 @@  #include "tracker-easy.h"  #include "tracker-easy-dialog.h" -#include "tracker-easy-api.h"  #include "module.hpp" -#include "point-extractor.h"  #include <memory> - -  namespace EasyTracker  { diff --git a/tracker-easy/point-extractor.cpp b/tracker-easy/point-extractor.cpp index abaa0739..c1f525c9 100644 --- a/tracker-easy/point-extractor.cpp +++ b/tracker-easy/point-extractor.cpp @@ -31,7 +31,7 @@ namespace EasyTracker      } -    void PointExtractor::extract_points(const cv::Mat& aFrame, cv::Mat* aPreview, std::vector<vec2>& aPoints) +    void PointExtractor::ExtractPoints(const cv::Mat& aFrame, cv::Mat* aPreview, std::vector<cv::Point>& aPoints)      {          //TODO: Assert if channel size is neither one nor two          // Make sure our frame channel is 8 bit @@ -99,10 +99,10 @@ namespace EasyTracker                  && bBox.width <= s.max_point_size                  && bBox.height <= s.max_point_size)              { -                vec2 center; -                center[0] = bBox.x + bBox.width / 2; -                center[1] = bBox.y + bBox.height / 2; -                aPoints.push_back(vec2(center)); +                cv::Point center; +                center.x = bBox.x + bBox.width / 2; +                center.y = bBox.y + bBox.height / 2; +                aPoints.push_back(center);                  if (aPreview)                  { @@ -124,9 +124,9 @@ namespace EasyTracker              // Search for the point with highest Y coordinate              for (size_t i = 0; i < aPoints.size(); i++)              { -                if (aPoints[i][1] > maxY) +                if (aPoints[i].y > maxY)                  { -                    maxY = aPoints[i][1]; +                    maxY = aPoints[i].y;                      index = i;                  }              } diff --git a/tracker-easy/point-extractor.h b/tracker-easy/point-extractor.h index d6bbd241..7827bb30 100644 --- a/tracker-easy/point-extractor.h +++ b/tracker-easy/point-extractor.h @@ -8,27 +8,26 @@  #pragma once -#include "tracker-easy-api.h" - +#include "settings.h"  #include <vector>  #include <opencv2/core.hpp>  #include <opencv2/imgproc.hpp> -using namespace numeric_types; -  namespace EasyTracker  { +    const int KPointCount = 3; -    class PointExtractor final : public IPointExtractor +    class PointExtractor       {      public: +        PointExtractor();          // extracts points from frame and draws some processing info into frame, if draw_output is set          // dt: time since last call in seconds -        void extract_points(const cv::Mat& aFrame, cv::Mat* aPreview, std::vector<vec2>& aPoints) override; -        PointExtractor(); +        void ExtractPoints(const cv::Mat& aFrame, cv::Mat* aPreview, std::vector<cv::Point>& aPoints); +                  // Settings          Settings s;          // Our frame with a channel size of 8 bits diff --git a/tracker-easy/preview.cpp b/tracker-easy/preview.cpp index f5c239e9..364e45ca 100644 --- a/tracker-easy/preview.cpp +++ b/tracker-easy/preview.cpp @@ -11,6 +11,7 @@  #include "compat/math.hpp"  #include <opencv2/imgproc.hpp> +#include <QDebug>  namespace EasyTracker @@ -99,20 +100,18 @@ namespace EasyTracker              QImage::Format_ARGB32);      } -    void Preview::draw_head_center(numeric_types::f x, numeric_types::f y) +    void Preview::DrawCross(cv::Point aPoint)      { -        int px = iround(x), py = iround(y); -          constexpr int len = 9;          static const cv::Scalar color(0, 255, 255);          cv::line(iFrameRgb, -            cv::Point(px - len, py), -            cv::Point(px + len, py), +            cv::Point(aPoint.x - len, aPoint.y), +            cv::Point(aPoint.x + len, aPoint.y),              color, 2);          cv::line(iFrameRgb, -            cv::Point(px, py - len), -            cv::Point(px, py + len), +            cv::Point(aPoint.x, aPoint.y - len), +            cv::Point(aPoint.x, aPoint.y + len),              color, 2);      } diff --git a/tracker-easy/preview.h b/tracker-easy/preview.h index 785d76d4..979d272b 100644 --- a/tracker-easy/preview.h +++ b/tracker-easy/preview.h @@ -9,8 +9,6 @@  #pragma once -#include "tracker-easy-api.h" -  #include <opencv2/core.hpp>  #include <QImage> @@ -23,7 +21,7 @@ namespace EasyTracker          Preview& operator=(const cv::Mat& frame);          QImage get_bitmap(); -        void draw_head_center(numeric_types::f x, numeric_types::f y); +        void DrawCross(cv::Point aPoint);          operator cv::Mat&() { return iFrameResized; }          operator cv::Mat const&() const { return iFrameResized; } diff --git a/tracker-easy/tracker-easy-api.h b/tracker-easy/tracker-easy-api.h deleted file mode 100644 index b50ce018..00000000 --- a/tracker-easy/tracker-easy-api.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (c) 2019 Stephane Lenclud - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - */ - -#pragma once - -#include "settings.h" - -#include "cv/numeric.hpp" -#include "options/options.hpp" -#include "video/camera.hpp" - -#include <tuple> -#include <type_traits> -#include <memory> - -#include <opencv2/core.hpp> - -#include <QImage> -#include <QString> - - -const int KPointCount = 3; - -class IPointExtractor -{ -public: -    using vec2 = numeric_types::vec2; -    using f = numeric_types::f; - -    virtual void extract_points(const cv::Mat& image, cv::Mat* aPreview, std::vector<vec2>& aPoints) = 0; -}; - - diff --git a/tracker-easy/tracker-easy-dialog.h b/tracker-easy/tracker-easy-dialog.h index 861e0ff9..f5a52d0c 100644 --- a/tracker-easy/tracker-easy-dialog.h +++ b/tracker-easy/tracker-easy-dialog.h @@ -7,9 +7,8 @@  #pragma once -#include "tracker-easy-api.h" -  #include "tracker-easy.h" +#include "settings.h"  #include "ui_tracker-easy-settings.h"  #include "cv/translation-calibrator.hpp"  #include "video/video-widget.hpp" diff --git a/tracker-easy/tracker-easy.cpp b/tracker-easy/tracker-easy.cpp index e69cbb92..d5bccc6b 100644 --- a/tracker-easy/tracker-easy.cpp +++ b/tracker-easy/tracker-easy.cpp @@ -12,7 +12,6 @@  #include "compat/math-imports.hpp"  #include "compat/check-visible.hpp"  #include "point-extractor.h" -#include "tracker-easy-api.h"  #include <QHBoxLayout>  #include <QDebug> @@ -36,7 +35,6 @@ namespace EasyTracker      Tracker::Tracker() :          s{ KModuleName }, -        iPointExtractor{ std::make_unique<PointExtractor>() },          iPreview{ preview_width, preview_height }      {          cv::setBreakOnError(true); @@ -141,7 +139,7 @@ namespace EasyTracker                  }                  iPoints.clear(); -                iPointExtractor->extract_points(iMatFrame, (preview_visible ? &iPreview.iFrameRgb : nullptr), iPoints); +                iPointExtractor.ExtractPoints(iMatFrame, (preview_visible ? &iPreview.iFrameRgb : nullptr), iPoints);                  point_count.store(iPoints.size(), std::memory_order_relaxed);                  const bool success = iPoints.size() >= KPointCount; @@ -175,9 +173,9 @@ namespace EasyTracker                          int minY = std::numeric_limits<int>::max();                          for (int i = 0; i < 3; i++)                          { -                            if (iPoints[i][1] < minY) +                            if (iPoints[i].y < minY)                              { -                                minY = iPoints[i][1]; +                                minY = iPoints[i].y;                                  topPointIndex = i;                              }                          } @@ -189,9 +187,9 @@ namespace EasyTracker                          for (int i = 0; i < 3; i++)                          {                              // Excluding top most point -                            if (i != topPointIndex && iPoints[i][0] > maxX) +                            if (i != topPointIndex && iPoints[i].x > maxX)                              { -                                maxX = iPoints[i][0]; +                                maxX = iPoints[i].x;                                  rightPointIndex = i;                              }                          } @@ -209,9 +207,9 @@ namespace EasyTracker                          }                          // -                        trackedPoints.push_back(cv::Point2f(iPoints[rightPointIndex][0], iPoints[rightPointIndex][1])); -                        trackedPoints.push_back(cv::Point2f(iPoints[leftPointIndex][0], iPoints[leftPointIndex][1])); -                        trackedPoints.push_back(cv::Point2f(iPoints[topPointIndex][0], iPoints[topPointIndex][1])); +                        trackedPoints.push_back(iPoints[rightPointIndex]); +                        trackedPoints.push_back(iPoints[leftPointIndex]); +                        trackedPoints.push_back(iPoints[topPointIndex]);                          dbgout << "Object: " << objectPoints << "\n";                          dbgout << "Points: " << trackedPoints << "\n"; @@ -303,7 +301,7 @@ namespace EasyTracker                      if (topPointIndex != -1)                      {                          // Render a cross to indicate which point is the head -                        iPreview.draw_head_center(iPoints[topPointIndex][0], iPoints[topPointIndex][1]); +                        iPreview.DrawCross(iPoints[topPointIndex]);                      }                      // Show full size preview pop-up diff --git a/tracker-easy/tracker-easy.h b/tracker-easy/tracker-easy.h index fe7fece7..8b771c67 100644 --- a/tracker-easy/tracker-easy.h +++ b/tracker-easy/tracker-easy.h @@ -9,11 +9,12 @@  #pragma once  #include "api/plugin-api.hpp" -#include "tracker-easy-api.h"  #include "cv/numeric.hpp"  #include "video/video-widget.hpp"  #include "video/camera.hpp"  #include "preview.h" +#include "settings.h" +#include "point-extractor.h"  #include <atomic>  #include <memory> @@ -58,11 +59,12 @@ namespace EasyTracker          Settings s;          std::unique_ptr<QLayout> layout; -        std::vector<vec2> iPoints; +        std::vector<cv::Point> iPoints;          int preview_width = 320, preview_height = 240; -        std::unique_ptr<IPointExtractor> iPointExtractor; +        PointExtractor iPointExtractor; +          std::unique_ptr<video::impl::camera> camera;          video::impl::camera::info iCameraInfo;          std::unique_ptr<video_widget> widget; | 
