Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从Point2f提取数据_C++_Opencv_Computer Vision - Fatal编程技术网

C++ 从Point2f提取数据

C++ 从Point2f提取数据,c++,opencv,computer-vision,C++,Opencv,Computer Vision,我正在开发一个需要找到红色片段的代码。我正在使用函数mineConclosingCircle获取图像的中心 函数给我中心的方式是向量格式vectorcenter(contours.size())。然而,我需要这些数据来确定感兴趣的区域(ROI)。有没有办法从点中提取数据,这样我就可以得到一个整数中X和Y的两个坐标 谢谢 --更新-- 我将发布一些代码,试图更好地解释我想做什么: vector<vector<Point> > contours_poly( contours.

我正在开发一个需要找到红色片段的代码。我正在使用函数
mineConclosingCircle
获取图像的中心

函数给我中心的方式是向量格式
vectorcenter(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] );
 }
vector contours_poly(contours.size());
向量中心(courtos.size());
Vectoradius(courtous.size());
对于(int i=0;i

因此,一旦我从图像中获得轮廓,我就应用函数
minenclosingcirle
来确定中心。我是OpenCV的新手。我假设它找到的圆心保存在点2f的向量中。我想做的事情是访问这些点,以获得对象的位置,从而确定对象周围的ROI。

如果使用IDE,则可以键入以下内容

Point2f p;
p.
IDE将帮助您完成类的正确字段

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

typedef Point_u2f;
....
模板类CV_导出点_{
....
_Tp x,y;//<点坐标

如果您使用IDE,则只需键入以下内容

Point2f p;
p.
IDE将帮助您完成类的正确字段

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

typedef Point_u2f;
....
模板类CV_导出点_{
....
_Tp x,y;//<点坐标

MineConSingCircle返回一个中心作为点2f和一个半径,不确定如何得到向量

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

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

MineClosingCircle返回一个中心作为点2f和一个半径,不确定如何得到向量

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

Point2f a;
int x = (int)a.x;
int y = (int)a.y;
根据你的评论

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

无边界检查:

float x = center[15].x;
float y = center[15].y;
float x = center.at(15).x;
float y = center.at(15).y;
使用边界检查:

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
 }
intidx=15;
if(idx
请注意,索引从
0
开始,因此您在这里访问第16点。

来自您的注释

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

无边界检查:

float x = center[15].x;
float y = center[15].y;
float x = center.at(15).x;
float y = center.at(15).y;
使用边界检查:

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
 }
intidx=15;
if(idx

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

claim
MineConclosingCircle
为给定的一组输入点提供了一个中心和半径。您到底想提取什么数据?我已更新了问题的描述。因此您有许多圆心。您想用它做什么那个信息?我得到一些圆,然后比较它们。我保留最大的一个,因为它是我感兴趣的。假设我得到20个圆,我知道圆15是最大的。我想知道中心的dex和Y位置[15],这是一个点2f,但在一个向量内。利用此信息,我将在我的对象周围创建一个感兴趣的区域。claim
MineConclosingCircle
为给定的一组输入点提供一个中心和半径。您正试图提取什么数据?我已更新了问题的描述。因此,您有许多圆心。您想做什么你想处理这些信息吗?我得到一些圆,然后比较它们。我保留最大的一个,因为这是我感兴趣的一个。假设我得到20个圆,我知道圆15是最大的。我想知道中心的dex和Y位置[15],这是一个点2f,但在一个向量内。利用此信息,我将在我的对象周围创建一个感兴趣的区域。我得到一个点2f向量,因为它正在计算多个点。请参阅代码中的新更新问题。我想我无法使用此方法,因为我的向量中保存了多个点。我得到了一个点2f向量它计算了不止一个。查看新更新的问题和代码。我想我不能使用此方法,因为我的向量中保存了多个点Hank很多人!成功了!我只有一个小问题。我必须使用“带边界检查”。这意味着什么?有界与无界的区别是什么?@enric.cornella基本上,如果你使用
[]
操作符越界,你会得到未定义的行为,这意味着你的程序可以做任何事情,包括继续产生垃圾结果。如果你使用
at()越界
,您将得到一个异常,除非由您处理,否则将终止