从Point2f提取数据

Extract data from Point2f

本文关键字:数据 提取 Point2f      更新时间:2023-10-16

我正在开发一个代码,需要找到一个红色的块。我使用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的新手。我假设它找到的圆心保存在这个点f的向量中。我想做的是访问这些点,以获得我的对象的位置,以确定对象周围的ROI。

从您的评论

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

没有边界检查:

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个点。

如果你使用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

minEnclosingCircle返回一个中心作为Point2f和半径,不确定你是如何得到一个矢量…?

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

Point2f a;
int x = (int)a.x;
int y = (int)a.y;