提问人:skm 提问时间:2/7/2014 最后编辑:skm 更新时间:2/6/2018 访问量:44380
openCV中Point2f的结构是什么?
What is the structure of Point2f in openCV?
问:
我对返回的内容感到困惑。我有那么,行和列的坐标是多少?它会是以下的:Point2f
vector<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 文档相反。请告诉我哪一个是正确的。如果您提供一些文档链接(我已经尝试搜索了很多),那就太好了。
答:
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
哇!短小精悍。谢谢。
评论
row = corner[i].x
row = corner[i].y