我正在开发一个需要找到红色代码的代码。我正在使用函数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。
答案 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;