Skip to content

Commit

Permalink
Using Ptr
Browse files Browse the repository at this point in the history
  • Loading branch information
albertopasqualetto committed Jun 5, 2024
1 parent c21e86d commit 9b4f6ff
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 29 deletions.
2 changes: 2 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 10 additions & 8 deletions include/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,31 @@
#include <vector>
#include "ball.h"

constexpr unsigned short MAX_BALLS = 16;


class Table {
cv::Rect bbox_;
cv::Vec3b color_;
cv::Mat transform_;
std::vector<Ball> balls_;
cv::Ptr<std::vector<Ball>> balls_;

public:
Table(cv::Rect bbox, cv::Vec3b color, cv::Mat transform, std::vector<Ball> 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<Ball>()) {}
Table(cv::Rect bbox, cv::Vec3b color): bbox_(bbox), color_(color), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(std::vector<Ball>()) {}
Table(cv::Rect bbox): bbox_(bbox), color_(cv::Vec3b(0, 0, 0)), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(std::vector<Ball>()) {}
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<Ball>()) {}
Table(cv::Rect bbox, cv::Vec3b color, cv::Mat transform, cv::Ptr<std::vector<Ball>> 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<std::vector<Ball>>()) {}
Table(cv::Rect bbox, cv::Vec3b color): bbox_(bbox), color_(color), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(cv::Ptr<std::vector<Ball>>()) {}
Table(cv::Rect bbox): bbox_(bbox), color_(cv::Vec3b(0, 0, 0)), transform_(cv::Mat::eye(3, 3, CV_64F)), balls_(cv::Ptr<std::vector<Ball>>()) {}
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<std::vector<Ball>>()) {}

cv::Rect getBbox() const;
cv::Vec3b getColor() const;
cv::Mat getTransform() const;
std::vector<Ball> getBalls() const;
cv::Ptr<std::vector<Ball>> getBalls() const;

void setBbox(cv::Rect bbox);
void setColor(cv::Vec3b color);
void setTransform(cv::Mat transform);
void setBalls(std::vector<Ball> balls);
void setBalls(cv::Ptr<std::vector<Ball>> balls);

void addBall(Ball ball);
void removeBall(int index);
Expand Down
8 changes: 4 additions & 4 deletions include/tracking.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@


class BallTracker {
private:
// Index in ballsVec_ is the same as the index in ballTrackers_
std::vector<cv::Ptr<cv::Tracker>> ballTrackers_;
std::vector<Ball> ballsVec_;
cv::Ptr<std::vector<Ball>> ballsVec_;
bool isInitialized_;

void createTrackers();

public:
BallTracker(const std::vector<Ball> &balls);
explicit BallTracker(cv::Ptr<std::vector<Ball>> balls);

cv::Rect trackOne(unsigned short ballIndex, const cv::Mat &frame, bool callInit);

std::vector<Ball> trackAll(const cv::Mat &frame);
cv::Ptr<std::vector<Ball>> trackAll(const cv::Mat &frame);
};


Expand Down
14 changes: 7 additions & 7 deletions src/table.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_;
Expand All @@ -27,7 +27,7 @@ cv::Mat Table::getTransform() const {
return transform_;
}

std::vector<Ball> Table::getBalls() const {
cv::Ptr<std::vector<Ball>> Table::getBalls() const {
if (balls_.empty())
throw std::runtime_error("balls is uninitialized");

Expand All @@ -39,27 +39,27 @@ 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;
}

void Table::setTransform(cv::Mat transform) {
transform_ = std::move(transform);
}

void Table::setBalls(std::vector<Ball> balls) {
void Table::setBalls(cv::Ptr<std::vector<Ball>> 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();
}
21 changes: 11 additions & 10 deletions src/tracking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<cv::Tracker> tracker = cv::TrackerCSRT::create(); //parameters go here if necessary
ballTrackers_.push_back(tracker);
}
Expand All @@ -16,39 +16,40 @@ void BallTracker::createTrackers() {
}


BallTracker::BallTracker(const std::vector<Ball> &balls) {
BallTracker::BallTracker(cv::Ptr<std::vector<Ball>> 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<Ball> BallTracker::trackAll(const cv::Mat &frame) {
cv::Ptr<std::vector<Ball>> 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);
}
Expand Down

0 comments on commit 9b4f6ff

Please sign in to comment.