从 Point2f 提取数据

enr*_*lla 0 c++ opencv computer-vision

我正在开发一个需要找到红色部分的代码。我正在使用该函数 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] );
 }
Run Code Online (Sandbox Code Playgroud)

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

jua*_*nza 5

从您的评论中

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

无边界检查:

float x = center[15].x;
float y = center[15].y;
Run Code Online (Sandbox Code Playgroud)

带有边界检查:

float x = center.at(15).x;
float y = center.at(15).y;
Run Code Online (Sandbox Code Playgroud)

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

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

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