From 9b4f6ff7d95acc15c8f99f70e2e62cc54c9784eb Mon Sep 17 00:00:00 2001 From: Alberto Pasqualetto Date: Wed, 5 Jun 2024 11:22:57 +0200 Subject: [PATCH] Using Ptr --- .idea/inspectionProfiles/Project_Default.xml | 2 ++ include/table.h | 18 +++++++++-------- include/tracking.h | 8 ++++---- src/table.cpp | 14 ++++++------- src/tracking.cpp | 21 ++++++++++---------- 5 files changed, 34 insertions(+), 29 deletions(-) diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 74da0dc..85645c8 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,6 +1,7 @@ \ No newline at end of file diff --git a/include/table.h b/include/table.h index 2ba2203..99b998b 100644 --- a/include/table.h +++ b/include/table.h @@ -9,29 +9,31 @@ #include #include "ball.h" +constexpr unsigned short MAX_BALLS = 16; + class Table { cv::Rect bbox_; cv::Vec3b color_; cv::Mat transform_; - std::vector balls_; + cv::Ptr> balls_; public: - Table(cv::Rect bbox, cv::Vec3b color, cv::Mat transform, std::vector balls): bbox_(bbox), color_(color), transform_(transform), balls_(balls) {} - Table(cv::Rect bbox, cv::Vec3b color, cv::Mat transform): bbox_(bbox), color_(color), transform_(transform), balls_(std::vector()) {} - Table(cv::Rect bbox, cv::Vec3b color): bbox_(bbox), color_(color), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(std::vector()) {} - Table(cv::Rect bbox): bbox_(bbox), color_(cv::Vec3b(0, 0, 0)), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(std::vector()) {} - Table(): bbox_(cv::Rect(0, 0, 0, 0)), color_(cv::Vec3b(0, 0, 0)), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(std::vector()) {} + Table(cv::Rect bbox, cv::Vec3b color, cv::Mat transform, cv::Ptr> balls): bbox_(bbox), color_(color), transform_(transform), balls_(balls) {} + Table(cv::Rect bbox, cv::Vec3b color, cv::Mat transform): bbox_(bbox), color_(color), transform_(transform), balls_(cv::Ptr>()) {} + Table(cv::Rect bbox, cv::Vec3b color): bbox_(bbox), color_(color), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(cv::Ptr>()) {} + Table(cv::Rect bbox): bbox_(bbox), color_(cv::Vec3b(0, 0, 0)), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(cv::Ptr>()) {} + Table(): bbox_(cv::Rect(0, 0, 0, 0)), color_(cv::Vec3b(0, 0, 0)), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(cv::Ptr>()) {} cv::Rect getBbox() const; cv::Vec3b getColor() const; cv::Mat getTransform() const; - std::vector getBalls() const; + cv::Ptr> getBalls() const; void setBbox(cv::Rect bbox); void setColor(cv::Vec3b color); void setTransform(cv::Mat transform); - void setBalls(std::vector balls); + void setBalls(cv::Ptr> balls); void addBall(Ball ball); void removeBall(int index); diff --git a/include/tracking.h b/include/tracking.h index 8315ae3..0f887ed 100644 --- a/include/tracking.h +++ b/include/tracking.h @@ -9,19 +9,19 @@ class BallTracker { -private: + // Index in ballsVec_ is the same as the index in ballTrackers_ std::vector> ballTrackers_; - std::vector ballsVec_; + cv::Ptr> ballsVec_; bool isInitialized_; void createTrackers(); public: - BallTracker(const std::vector &balls); + explicit BallTracker(cv::Ptr> balls); cv::Rect trackOne(unsigned short ballIndex, const cv::Mat &frame, bool callInit); - std::vector trackAll(const cv::Mat &frame); + cv::Ptr> trackAll(const cv::Mat &frame); }; diff --git a/src/table.cpp b/src/table.cpp index 497491b..459063c 100644 --- a/src/table.cpp +++ b/src/table.cpp @@ -14,7 +14,7 @@ cv::Rect Table::getBbox() const { } cv::Vec3b Table::getColor() const { - if (color_ == cv::Vec3b(0, 0, 0)) // black = uninitialized + if (color_ == cv::Vec3b(0, 0, 0)) // black(0,0,0) = uninitialized throw std::runtime_error("color is uninitialized"); return color_; @@ -27,7 +27,7 @@ cv::Mat Table::getTransform() const { return transform_; } -std::vector Table::getBalls() const { +cv::Ptr> Table::getBalls() const { if (balls_.empty()) throw std::runtime_error("balls is uninitialized"); @@ -39,7 +39,7 @@ void Table::setBbox(cv::Rect bbox) { bbox_ = bbox; } -void Table::setColor(cv::Vec3b color) { +void Table::setColor(cv::Vec3b color) { // NOLINT(*-unnecessary-value-param) color_ = color; } @@ -47,19 +47,19 @@ void Table::setTransform(cv::Mat transform) { transform_ = std::move(transform); } -void Table::setBalls(std::vector balls) { +void Table::setBalls(cv::Ptr> balls) { // NOLINT(*-unnecessary-value-param) balls_ = balls; // TODO check if it's a copy or a reference (copy constructor? use std::move?) } void Table::addBall(Ball ball) { - balls_.push_back(ball); + balls_->push_back(ball); } void Table::removeBall(int index) { - balls_.erase(balls_.begin() + index); + balls_->erase(balls_->begin() + index); } void Table::clearBalls() { - balls_.clear(); + balls_->clear(); } diff --git a/src/tracking.cpp b/src/tracking.cpp index 5e025ff..86215bf 100644 --- a/src/tracking.cpp +++ b/src/tracking.cpp @@ -7,7 +7,7 @@ void BallTracker::createTrackers() { - for (unsigned short i = 0; i < ballsVec_.size(); i++) { + for (unsigned short i = 0; i < ballsVec_->size(); i++) { cv::Ptr tracker = cv::TrackerCSRT::create(); //parameters go here if necessary ballTrackers_.push_back(tracker); } @@ -16,39 +16,40 @@ void BallTracker::createTrackers() { } -BallTracker::BallTracker(const std::vector &balls) { +BallTracker::BallTracker(cv::Ptr> balls) { // NOLINT(*-unnecessary-value-param) isInitialized_ = false; ballsVec_ = balls; - ballsVec_.shrink_to_fit(); - ballTrackers_.reserve(ballsVec_.size()); +// ballsVec_.shrink_to_fit(); + ballTrackers_.reserve(ballsVec_->size()); } cv::Rect BallTracker::trackOne(unsigned short ballIndex, const cv::Mat &frame, bool callInit) { - cv::Rect bbox = ballsVec_[ballIndex].getBbox(); + cv::Rect bbox = ballsVec_->at(ballIndex).getBbox(); + ballsVec_->at(ballIndex).setBbox_prec(bbox); if (callInit) { ballTrackers_[ballIndex]->init(frame, bbox); } - bool updatedBbox = ballTrackers_[ballIndex]->update(frame, bbox); - ballsVec_[ballIndex].setBbox(bbox); + bool isBboxUpdated = ballTrackers_[ballIndex]->update(frame, bbox); + ballsVec_->at(ballIndex).setBbox(bbox); return bbox; -// std::cout<< "Ball " << ballIndex << " updated? " << updatedBbox << " current bbox: " << bbox << std::endl; +// std::cout<< "Ball " << ballIndex << " updated? " << isBboxUpdated << " current bbox: " << bbox << std::endl; // return cv::Point(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2); } -std::vector BallTracker::trackAll(const cv::Mat &frame) { +cv::Ptr> BallTracker::trackAll(const cv::Mat &frame) { if (!isInitialized_) { createTrackers(); } - for (unsigned short i = 0; i < ballsVec_.size(); i++) { + for (unsigned short i = 0; i < ballsVec_->size(); i++) { if (!isInitialized_){ trackOne(i, frame, true); }