0

我正在开发一个需要找到红色部分的代码。我正在使用该功能 minEnclosingCircle来获取图像的中心。

该函数给我中心的方式是矢量格式vector<Point2f>center( contours.size() );。但是,我需要这些数据来确定感兴趣区域 (ROI)。有什么方法可以从该点提取数据,以便我可以在 X 和 Y 中有两个坐标在一个整数中?

谢谢!

- 更新 -

我将发布一些代码以尝试更好地解释我想要做什么:

vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );


for( int i = 0; i < contours.size(); i++ )
{   
    approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
    minEnclosingCircle( (Mat)contours_poly[i], center[i], radius[i] );
 }

因此,一旦我从图像中获得轮廓,我就会应用该函数minEnclosingCicrle来确定中心。我是 OpenCV 的新手。我想它找到的圆心保存在这个 Point2f 的向量中。我想要做的是访问这些点,以便获得我的对象的位置以确定对象周围的 ROI。

4

3 回答 3

4

从你的评论

假设我有 20 个圆圈,并且我知道第 15 个圆圈是最大的。我想知道中心 [15] 的 de X 和 Y 位置,它是一个 point2f,但在一个向量内。

没有边界检查:

float x = center[15].x;
float y = center[15].y;

带边界检查:

float x = center.at(15).x;
float y = center.at(15).y;

关于向量的范围,如果索引是>= center.size(),则超出范围。所以你可以自己做检查:

 int idx = 15;
 if (idx < center.size())
 {
   // OK to access with index 15
 }

请注意,索引从 开始0,因此您在这里访问的是第 16 个点。

于 2013-03-21T10:39:47.280 回答
0

minEnclosureCircle 返回一个中心作为 Point2f 和一个半径,不知道你是如何得到一个向量..?

在任何情况下,您都可以直接访问 Point2f 的坐标,因为它们是公共成员。

Point2f a;
int x = (int)a.x;
int y = (int)a.y;
于 2013-03-21T09:28:39.363 回答
0

如果您使用 IDE,那么您可以输入类似

Point2f p;
p.

IDE 将帮助您完成课程的正确字段。

如果您编写的程序没有智能自动完成,您只需查看 opencv 的源代码即可查看(这部分代码来自 opencv 源代码并根据许可分发,您可以在 opencv 网站和源代码中找到):

typedef Point_<float> Point2f;
....
template<typename _Tp> class CV_EXPORTS Point_{
....
    _Tp x, y; //< the point coordinates
于 2013-03-21T09:28:09.873 回答