Visual Servoing Platform version 3.7.0
Loading...
Searching...
No Matches
vpImageCircle.h
1/*
2 * ViSP, open source Visual Servoing Platform software.
3 * Copyright (C) 2005 - 2025 by Inria. All rights reserved.
4 *
5 * This software is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 * See the file LICENSE.txt at the root directory of this source
10 * distribution for additional information about the GNU GPL.
11 *
12 * For using ViSP with software that can not be combined with the GNU
13 * GPL, please contact Inria about acquiring a ViSP Professional
14 * Edition License.
15 *
16 * See https://visp.inria.fr for more information.
17 *
18 * This software was developed at:
19 * Inria Rennes - Bretagne Atlantique
20 * Campus Universitaire de Beaulieu
21 * 35042 Rennes Cedex
22 * France
23 *
24 * If you have questions regarding the use of this file, please contact
25 * Inria at visp@inria.fr
26 *
27 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29 *
30 * Description:
31 * Image circle, i.e. circle in the image space.
32 */
33
38
39#ifndef VP_IMAGE_CIRCLE_H
40#define VP_IMAGE_CIRCLE_H
41
42#include <visp3/core/vpConfig.h>
43#include <visp3/core/vpColor.h>
44#include <visp3/core/vpImage.h>
45#include <visp3/core/vpImagePoint.h>
46#include <visp3/core/vpRect.h>
47
48#if defined(VISP_HAVE_OPENCV)
49#include <opencv2/core/core.hpp>
50#endif
51
56class VISP_EXPORT vpImageCircle
57{
58public:
63
67 vpImageCircle(const vpImagePoint &center, const float &radius);
68
69#ifdef HAVE_OPENCV_CORE
73 vpImageCircle(const cv::Vec3f &vec);
74#endif
75
85 float computeAngularCoverageInRoI(const vpRect &roi, const float &roundingTolerance = 0.001f) const;
86
94 float computeArcLengthInRoI(const vpRect &roi, const float &roundingTolerance = 0.001f) const;
95
103 unsigned int computePixelsInMask(const vpImage<bool> &mask) const;
104
109 vpImagePoint getCenter() const;
110
115 float getRadius() const;
116
121 vpRect getBBox() const;
122
127 float get_n20() const;
128
133 float get_n02() const;
134
139 float get_n11() const;
140
149 inline bool isInside(const vpImagePoint &ip) const
150 {
151 double radius = static_cast<double>(m_radius);
152 double squaredRadius = radius * radius;
153 double distance = vpImagePoint::sqrDistance(m_center, ip);
154 return (distance <= squaredRadius);
155 }
156
157private:
158 vpImagePoint m_center;
159 float m_radius;
160};
161
168VISP_EXPORT bool operator==(const vpImageCircle &a, const vpImageCircle &b);
169
176VISP_EXPORT bool operator!=(const vpImageCircle &a, const vpImageCircle &b);
177
178END_VISP_NAMESPACE
179#endif
Class that defines a 2D circle in an image.
float computeAngularCoverageInRoI(const vpRect &roi, const float &roundingTolerance=0.001f) const
float getRadius() const
float get_n11() const
vpRect getBBox() const
vpImagePoint getCenter() const
float get_n02() const
float computeArcLengthInRoI(const vpRect &roi, const float &roundingTolerance=0.001f) const
bool isInside(const vpImagePoint &ip) const
Returns true if the image point belongs to the circle and false otherwise.
float get_n20() const
unsigned int computePixelsInMask(const vpImage< bool > &mask) const
Count the number of pixels of the circle whose value in the mask is true.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
static double sqrDistance(const vpImagePoint &iP1, const vpImagePoint &iP2)
Definition of the vpImage class member functions.
Definition vpImage.h:131
Defines a rectangle in the plane.
Definition vpRect.h:79