43 #include <visp3/core/vpConfig.h>
45 #if VISP_HAVE_OPENCV_VERSION >= 0x020300
46 #include <opencv2/imgproc/imgproc.hpp>
49 #include <visp3/tt/vpTemplateTrackerZone.h>
60 : Zone(), min_x(-1), min_y(-1), max_x(-1), max_y(-1)
115 std::vector<vpImagePoint> vip;
127 if (vip.size() > 1) {
132 if (vip.size() % 3 == 2)
135 else if (vip.size() % 3 == 0) {
172 if (vip.size() == 3) {
174 }
else if (vip.size() == 4) {
175 std::vector<vpImagePoint> vip_delaunay;
176 vip_delaunay.push_back(vip[0]);
177 vip_delaunay.push_back(vip[1]);
178 vip_delaunay.push_back(vip[2]);
179 vip_delaunay.push_back(vip[2]);
180 vip_delaunay.push_back(vip[3]);
181 vip_delaunay.push_back(vip[0]);
184 #if VISP_HAVE_OPENCV_VERSION >= 0x020300
187 for (
size_t i = 0; i < vip.size(); i++) {
188 cv::Point2f fp((
float)vip[i].get_u(), (
float)vip[i].get_v());
194 std::vector<cv::Vec6f> triangleList;
195 subdiv.getTriangleList(triangleList);
200 std::vector<vpImagePoint> vip_delaunay;
201 for (
size_t i = 0; i < triangleList.size(); i++) {
202 cv::Vec6f t = triangleList[i];
203 std::vector<vpImagePoint> p(3);
205 p[0].set_uv(t[0], t[1]);
206 p[1].set_uv(t[2], t[3]);
207 p[2].set_uv(t[4], t[5]);
209 if (p[0].inRectangle(rect) && p[1].inRectangle(rect) && p[2].inRectangle(rect)) {
210 vip_delaunay.push_back(p[0]);
211 vip_delaunay.push_back(p[1]);
212 vip_delaunay.push_back(p[2]);
223 for (
unsigned int i = 0; i < vip.size(); i += 3) {
272 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
273 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
274 if (Iterateurvecteur->inTriangle(i, j))
288 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
289 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
290 if (Iterateurvecteur->inTriangle(i, j))
306 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
307 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
308 if (Iterateurvecteur->inTriangle(i, j)) {
327 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
328 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
329 if (Iterateurvecteur->inTriangle(i, j)) {
450 std::vector<vpImagePoint> ip;
451 for (
unsigned int i = 0; i <
Zone.size(); i++) {
453 Zone[i].getCorners(ip);
467 std::vector<vpImagePoint> ip;
468 for (
unsigned int i = 0; i <
Zone.size(); i++) {
470 Zone[i].getCorners(ip);
494 for (
int i = 0; i < (int)I.
getHeight(); i++) {
495 for (
int j = 0; j < (int)I.
getWidth(); j++) {
497 I[i][j] = gray_level;
514 tempZone.
add(TtempDown);
552 double x_center = 0, y_center = 0;
553 for (
int j = 0; j < borne_x; j++)
554 for (
int i = 0; i < borne_y; i++)
565 x_center = x_center / cpt_pt;
566 y_center = y_center / cpt_pt;
568 center.
set_uv(x_center, y_center);
Class to define RGB colors available for display functionnalities.
static const vpColor blue
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
static void flush(const vpImage< unsigned char > &I)
error that can be emited by ViSP classes.
@ badValue
Used to indicate that a value is not in the allowed range.
@ functionNotImplementedError
Function not implemented.
@ divideByZeroError
Division by zero.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
void set_uv(double u, double v)
unsigned int getWidth() const
unsigned int getHeight() const
Defines a rectangle in the plane.
void setBottomRight(const vpImagePoint &bottomRight)
void setTopLeft(const vpImagePoint &topLeft)
bool inTriangle(const vpImagePoint &ip) const
vpTemplateTrackerTriangle getPyramidDown() const
vpTemplateTrackerZone getPyramidDown() const
std::vector< vpTemplateTrackerTriangle > Zone
Vector of triangles that defines the zone.
int max_y
Bounding box parameter.
vpTemplateTrackerZone & operator=(const vpTemplateTrackerZone &z)
void initFromPoints(const vpImage< unsigned char > &I, const std::vector< vpImagePoint > &ip, bool delaunay=false)
bool inZone(const int &i, const int &j) const
void getTriangle(unsigned int i, vpTemplateTrackerTriangle &T) const
unsigned int getNbTriangle() const
void copy(const vpTemplateTrackerZone &z)
int max_x
Bounding box parameter.
void fillTriangle(vpImage< unsigned char > &I, unsigned int id, unsigned char gray_level)
vpRect getBoundingBox() const
void add(const vpTemplateTrackerTriangle &t)
vpImagePoint getCenter() const
void display(const vpImage< unsigned char > &I, const vpColor &col=vpColor::green, unsigned int thickness=3)
virtual ~vpTemplateTrackerZone()
int min_y
Bounding box parameter.
void initClick(const vpImage< unsigned char > &I, bool delaunay=false)
int min_x
Bounding box parameter.
VISP_EXPORT int wait(double t0, double t)