openCV中Point2f的结构是什么?

What is the structure of Point2f in openCV?

提问人:skm 提问时间:2/7/2014 最后编辑:skm 更新时间:2/6/2018 访问量:44380

问:

我对返回的内容感到困惑。我有那么,行和列的坐标是多少?它会是以下的:Point2fvector<Point2f> corner;

int row_coordinate = corner[i].x;
int col_coordinate = corner[i].y;

但是,如果我采用上述约定,我会遇到分段错误。如果我这样做喜欢

int row_coordinate = corner[i].y;
int col_coordinate = corner[i].x;

然后我得到了结果,但它似乎与 OpenCV 文档相反。请告诉我哪一个是正确的。如果您提供一些文档链接(我已经尝试搜索了很多),那就太好了。

opencv

评论

0赞 KSletmoe 2/7/2014
您给出的两个代码示例是相同的。我想你可能打错了字
0赞 KSletmoe 2/7/2014
另外,请在此处查看“Point_”部分的底部示例:docs.opencv.org/modules/core/doc/basic_structures.html#point
0赞 skm 2/7/2014
我已经检查过了,但不幸的是我无法理解它。我已经多次检查了该页面,但无法从中提取我需要的信息
0赞 skm 2/7/2014
我只是想知道是否或row = corner[i].xrow = corner[i].y
0赞 berak 2/7/2014
行 == x;col == y;

答:

14赞 azer89 2/7/2014 #1

如果我是对的,我假设你对 OpenCV 的坐标系感到困惑。

由于我总是使用 x 作为宽度,使用 y 作为高度,因此在我的程序中,我像这样使用 OpenCV:

// make an image with height 100 and width 200   
cv::Mat img = cv::Mat::zeros(100, 200, CV_8UC1);

int width = img.cols;
int height = img.rows;

cv::Point2f pt(10, 20);

// How do I get a pixel at x = 10 and y = 20 ?
int px = img.at<uchar>(pt.y, pt.x); // yep, it's inverted

这是什么意思?OpenCV 对接系统基于行,然后基于列。如果要获取 (x, y) 处的像素,请使用 (y, x) 访问它

评论

0赞 skm 2/7/2014
感谢您的回复。是的,现在我明白了 x==width/cols 和 y==height/rows......但是你能提供一些官方文档的链接吗,例如,看看这个页面:tspp.wordpress.com/2009/10/19/x-y-coordinate-system-on-opencv
0赞 azer89 2/7/2014
对不起,我不知道:)
0赞 Micka 2/7/2014
@azer89不知道你可以在官方文档中的什么地方找到它,但我可以向你解释为什么它是这样设计的(至少我猜是这样)。点通常用于坐标系中,按照惯例具有 x(水平)和 y(垂直)轴。虽然矩阵没有 x 和 y 坐标,但有行和列,按照数学惯例,矩阵是行优先索引的。因此,OpenCV 使用矩阵和点就像任何人所假设的那样,唯一的“问题”是 IMAGES 嵌入在矩阵中,这样两个世界就混合了。因此,形式上是矩阵访问,而不是像素访问.at
0赞 Micka 2/7/2014
@azer89这里是在官方文档中:docs.opencv.org/doc/user_guide/......“ 注意 x 和 y 的顺序。由于在 OpenCV 中,图像由与矩阵相同的结构表示,因此我们对这两种情况使用相同的约定 - 从 0 开始的行索引(或 y 坐标)排在最前面,从 0 开始的列索引(或 x 坐标)紧随其后。或者,您可以使用以下表示法:Scalar intensity = img.at<uchar>(Point(x, y)); "
0赞 Syaiful Nizam Yahya 12/21/2018
哇!短小精悍。谢谢。