OpenCV学习笔记(十二):OpenCV坐标系与row&col的关系 (Mat::at(x,y)和Mat::at(Point(x, y))的区别)

坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。(虽然网上有学着说OpenCV中有些数据结构的坐标原点是在图片的左下角,但是我暂时还没碰到过)。

在使用image.at(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标。因此其访问的结果其实是访问image图像中的Point(x2, x1)点,即与image.at(Point(x2, x1))效果相同。

                                              row == heigh == Point.y//行

                                              col == width == Point.x //列

                                            Mat::at(Point(x, y)) == Mat::at(y,x)//

因为还有点的坐标,所以建议在访问时都用Mat::at(Point(x, y))这种形式吧,免去了点坐标和行列的转换。

IplImage*dst = NULL;
dst =cvCreateImage(cvSize(600, 480), IPL_DEPTH_8U, 3);
这里创建的dst是480行600列的,先列后行。

Mat dst;
dst =Mat(480, 600, CV_8UC3);
这里创建的dst同样是是480行600列的,但是先行后列。

RectROI_rect;
ROI_rect.x=10;
ROI_rect.y=20;
这里表示定义的感兴趣区域(矩形)的左上角像素的坐标(x,y)是(10,20),即位于第20行,第10列。
 

你可能感兴趣的:(opencv,图像)