38 #include <visp3/core/vpConfig.h>
40 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC)
41 #include <opencv2/imgproc/imgproc.hpp>
44 #include <visp3/tt/vpTemplateTrackerZone.h>
55 : Zone(), min_x(-1), min_y(-1), max_x(-1), max_y(-1)
110 std::vector<vpImagePoint> vip;
122 if (vip.size() > 1) {
127 if (vip.size() % 3 == 2)
130 else if (vip.size() % 3 == 0) {
167 if (vip.size() == 3) {
169 }
else if (vip.size() == 4) {
170 std::vector<vpImagePoint> vip_delaunay;
171 vip_delaunay.push_back(vip[0]);
172 vip_delaunay.push_back(vip[1]);
173 vip_delaunay.push_back(vip[2]);
174 vip_delaunay.push_back(vip[2]);
175 vip_delaunay.push_back(vip[3]);
176 vip_delaunay.push_back(vip[0]);
179 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC)
182 for (
size_t i = 0; i < vip.size(); i++) {
183 cv::Point2f fp((
float)vip[i].get_u(), (
float)vip[i].get_v());
189 std::vector<cv::Vec6f> triangleList;
190 subdiv.getTriangleList(triangleList);
195 std::vector<vpImagePoint> vip_delaunay;
196 for (
size_t i = 0; i < triangleList.size(); i++) {
197 cv::Vec6f t = triangleList[i];
198 std::vector<vpImagePoint> p(3);
200 p[0].set_uv(t[0], t[1]);
201 p[1].set_uv(t[2], t[3]);
202 p[2].set_uv(t[4], t[5]);
204 if (p[0].inRectangle(rect) && p[1].inRectangle(rect) && p[2].inRectangle(rect)) {
205 vip_delaunay.push_back(p[0]);
206 vip_delaunay.push_back(p[1]);
207 vip_delaunay.push_back(p[2]);
218 for (
unsigned int i = 0; i < vip.size(); i += 3) {
267 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
268 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
269 if (Iterateurvecteur->inTriangle(i, j))
283 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
284 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
285 if (Iterateurvecteur->inTriangle(i, j))
301 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
302 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
303 if (Iterateurvecteur->inTriangle(i, j)) {
322 std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
323 for (Iterateurvecteur =
Zone.begin(); Iterateurvecteur !=
Zone.end(); ++Iterateurvecteur) {
324 if (Iterateurvecteur->inTriangle(i, j)) {
445 std::vector<vpImagePoint> ip;
446 for (
unsigned int i = 0; i <
Zone.size(); i++) {
448 Zone[i].getCorners(ip);
462 std::vector<vpImagePoint> ip;
463 for (
unsigned int i = 0; i <
Zone.size(); i++) {
465 Zone[i].getCorners(ip);
489 for (
int i = 0; i < (int)I.
getHeight(); i++) {
490 for (
int j = 0; j < (int)I.
getWidth(); j++) {
492 I[i][j] = gray_level;
509 tempZone.
add(TtempDown);
547 double x_center = 0, y_center = 0;
548 for (
int j = 0; j < borne_x; j++)
549 for (
int i = 0; i < borne_y; i++)
560 x_center = x_center / cpt_pt;
561 y_center = y_center / cpt_pt;
563 center.
set_uv(x_center, y_center);
Class to define RGB colors available for display functionalities.
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 emitted 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)