我对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文档相反。请告诉我哪一个是正确的。如果你提供一些文档链接(我已经尝试过很多搜索)会非常好。
答案 0 :(得分:9)
如果我说得对,我认为你对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 corrdinate系统基于行然后是列。如果你想在(x,y)获得像素,使用(y,x)
来访问它