从Point2f中提取数据

时间:2013-03-21 09:20:56

标签: 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] );
 }

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

3 个答案:

答案 0 :(得分: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个点。

答案 1 :(得分: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

答案 2 :(得分:0)

minEnclosingCircle返回一个中心为Point2f和一个半径,不知道你是怎么得到一个向量的。?

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

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