forked from floratest1/SpireCV
add SingleObjectTracker position xyz output
This commit is contained in:
parent
fb9b65401d
commit
8bdde82ff3
|
@ -758,6 +758,19 @@ int SingleObjectTrackerBase::getTarget()
|
||||||
{
|
{
|
||||||
return this->_target;
|
return this->_target;
|
||||||
}
|
}
|
||||||
|
//增加跟踪目标位置输出
|
||||||
|
double SingleObjectTrackerBase::getObjectWs()
|
||||||
|
{
|
||||||
|
return this->_object_ws;
|
||||||
|
}
|
||||||
|
double SingleObjectTrackerBase::getObjectHs()
|
||||||
|
{
|
||||||
|
return this->_object_hs;
|
||||||
|
}
|
||||||
|
int SingleObjectTrackerBase::useWidthOrHeight()
|
||||||
|
{
|
||||||
|
return this->_use_width_or_height;
|
||||||
|
}
|
||||||
|
|
||||||
void SingleObjectTrackerBase::warmUp()
|
void SingleObjectTrackerBase::warmUp()
|
||||||
{
|
{
|
||||||
|
@ -803,6 +816,22 @@ void SingleObjectTrackerBase::track(cv::Mat img_, TargetsInFrame& tgts_)
|
||||||
tgt.setBox(rect.x, rect.y, rect.x+rect.width, rect.y+rect.height, img_.cols, img_.rows);
|
tgt.setBox(rect.x, rect.y, rect.x+rect.width, rect.y+rect.height, img_.cols, img_.rows);
|
||||||
tgt.setTrackID(1);
|
tgt.setTrackID(1);
|
||||||
tgt.setLOS(tgt.cx, tgt.cy, this->camera_matrix, img_.cols, img_.rows);
|
tgt.setLOS(tgt.cx, tgt.cy, this->camera_matrix, img_.cols, img_.rows);
|
||||||
|
int ow = int(round(rect.width));
|
||||||
|
int oh = int(round(rect.height));
|
||||||
|
if (this->_use_width_or_height == 0)
|
||||||
|
{
|
||||||
|
double z = this->camera_matrix.at<double>(0, 0) * this->_object_ws / ow;
|
||||||
|
double x = tan(tgt.los_ax / SV_RAD2DEG) * z;
|
||||||
|
double y = tan(tgt.los_ay / SV_RAD2DEG) * z;
|
||||||
|
tgt.setPosition(x, y, z);
|
||||||
|
}
|
||||||
|
else if (this->_use_width_or_height == 1)
|
||||||
|
{
|
||||||
|
double z = this->camera_matrix.at<double>(1, 1) * this->_object_hs / oh;
|
||||||
|
double x = tan(tgt.los_ax / SV_RAD2DEG) * z;
|
||||||
|
double y = tan(tgt.los_ay / SV_RAD2DEG) * z;
|
||||||
|
tgt.setPosition(x, y, z);
|
||||||
|
}
|
||||||
tgts_.targets.push_back(tgt);
|
tgts_.targets.push_back(tgt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -840,6 +869,18 @@ void SingleObjectTrackerBase::_load()
|
||||||
else if ("target" == std::string(i->key)) {
|
else if ("target" == std::string(i->key)) {
|
||||||
this->_target = i->value.toNumber();
|
this->_target = i->value.toNumber();
|
||||||
}
|
}
|
||||||
|
else if ("useWidthOrHeight" == std::string(i->key))
|
||||||
|
{
|
||||||
|
this->_use_width_or_height = i->value.toNumber();
|
||||||
|
}
|
||||||
|
else if ("sigleobjectW" == std::string(i->key))
|
||||||
|
{
|
||||||
|
this->_object_ws = i->value.toNumber();
|
||||||
|
}
|
||||||
|
else if ("sigleobjectH" == std::string(i->key))
|
||||||
|
{
|
||||||
|
this->_object_hs = i->value.toNumber();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setupImpl();
|
setupImpl();
|
||||||
|
|
|
@ -105,6 +105,9 @@ public:
|
||||||
std::string getAlgorithm();
|
std::string getAlgorithm();
|
||||||
int getBackend();
|
int getBackend();
|
||||||
int getTarget();
|
int getTarget();
|
||||||
|
double getObjectWs();
|
||||||
|
double getObjectHs();
|
||||||
|
int useWidthOrHeight();
|
||||||
protected:
|
protected:
|
||||||
virtual bool setupImpl();
|
virtual bool setupImpl();
|
||||||
virtual void initImpl(cv::Mat img_, const cv::Rect& bounding_box_);
|
virtual void initImpl(cv::Mat img_, const cv::Rect& bounding_box_);
|
||||||
|
@ -114,6 +117,9 @@ protected:
|
||||||
std::string _algorithm;
|
std::string _algorithm;
|
||||||
int _backend;
|
int _backend;
|
||||||
int _target;
|
int _target;
|
||||||
|
int _use_width_or_height;
|
||||||
|
double _object_ws;
|
||||||
|
double _object_hs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue