Visual Servoing Platform version 3.5.0
vpDetectorBase.cpp
1/****************************************************************************
2 *
3 * ViSP, open source Visual Servoing Platform software.
4 * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5 *
6 * This software is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 * See the file LICENSE.txt at the root directory of this source
11 * distribution for additional information about the GNU GPL.
12 *
13 * For using ViSP with software that can not be combined with the GNU
14 * GPL, please contact Inria about acquiring a ViSP Professional
15 * Edition License.
16 *
17 * See http://visp.inria.fr for more information.
18 *
19 * This software was developed at:
20 * Inria Rennes - Bretagne Atlantique
21 * Campus Universitaire de Beaulieu
22 * 35042 Rennes Cedex
23 * France
24 *
25 * If you have questions regarding the use of this file, please contact
26 * Inria at visp@inria.fr
27 *
28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30 *
31 * Description:
32 * Base class for object detection.
33 *
34 * Authors:
35 * Fabien Spindler
36 *
37 *****************************************************************************/
38#include <visp3/core/vpConfig.h>
39
40#include <visp3/detection/vpDetectorBase.h>
41
45vpDetectorBase::vpDetectorBase() : m_polygon(), m_message(), m_nb_objects(0), m_timeout_ms(0) {}
46
48 : m_polygon(o.m_polygon), m_message(o.m_message), m_nb_objects(o.m_nb_objects), m_timeout_ms(o.m_timeout_ms)
49{
50}
51
55std::vector<vpImagePoint> &vpDetectorBase::getPolygon(size_t i)
56{
57 if (i < m_polygon.size())
58 return m_polygon[i];
59 else
60 throw(vpException(vpException::badValue, "Bad index to retrieve object %d. Only %d objects are detected.", i,
61 m_polygon.size()));
62}
63
67std::string &vpDetectorBase::getMessage(size_t i)
68{
69 if (i < m_polygon.size())
70 return m_message[i];
71 else
72 throw(vpException(vpException::badValue, "Bad index to retrieve object %d . Only %d objects are detected.", i,
73 m_polygon.size()));
74}
75
80{
81 vpImagePoint cog(0, 0);
82 for (size_t j = 0; j < m_polygon[i].size(); j++) {
83 cog += m_polygon[i][j];
84 }
85 cog /= (double)m_polygon[i].size();
86 return cog;
87}
88
93{
94 assert(m_polygon[i].size() > 2);
95
96 double left, right;
97 double top, bottom;
98 left = right = m_polygon[i][0].get_u();
99 top = bottom = m_polygon[i][0].get_v();
100 for (size_t j = 0; j < m_polygon[i].size(); j++) {
101 double u = m_polygon[i][j].get_u();
102 double v = m_polygon[i][j].get_v();
103 if (u < left)
104 left = u;
105 if (u > right)
106 right = u;
107 if (v < top)
108 top = v;
109 if (v > bottom)
110 bottom = v;
111 }
112 vpRect roi(vpImagePoint(top, left), vpImagePoint(bottom, right));
113 return roi;
114}
std::vector< std::string > m_message
Message attached to each object.
std::vector< std::vector< vpImagePoint > > & getPolygon()
std::vector< std::vector< vpImagePoint > > m_polygon
For each object, defines the polygon that contains the object.
vpRect getBBox(size_t i) const
std::vector< std::string > & getMessage()
vpImagePoint getCog(size_t i) const
error that can be emited by ViSP classes.
Definition: vpException.h:72
@ badValue
Used to indicate that a value is not in the allowed range.
Definition: vpException.h:97
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition: vpImagePoint.h:88
Defines a rectangle in the plane.
Definition: vpRect.h:80