OpenCV坐标方向

OpenCV坐标方向和Matlab不同,x轴沿水平方向,y轴沿竖直方向。因为Matlab中数据按列存储,而OpenCV中数据按行存储。

OpenCV函数变量中涉及位置信息的有以下几类:

  1. x y
    点的坐标用(x,y)表示,x在前,y在后,例如
    [cpp]CvPoint cvPoint(int x, int y)[/cpp]
    cv::Point_与CvPoint类似。
  2. width height
    区域尺寸的宽和高,宽在前,高在后,例如
    [cpp]CvSize cvSize(int width, int height)[/cpp]
    cv::Size_与CvSize类似。
    [cpp]
    template<typename _Tp> class Size_
    {
    public:
    typedef _Tp value_type;

    Size_(_Tp _width, _Tp _height);

    }
    [/cpp]
    矩形则综合以上两种类型:
    [cpp]CvRect cvRect(int x, int y, int width, int height)[/cpp]
  3. row column
    主要矩阵类型cv::Mat,注意row相当于height,column相当于width,但两者在函数中的位置不同,row和col用于矩阵,width和height用于区域和尺寸。
    [cpp]CvMat* cvCreateMatHeader(int rows, int cols, int type)[/cpp]
    cv::Mat类型也有用row和column的构造函数
    Mat::Mat(int rows, int cols, int type)
    但若用cv::Size作为参数,则要注意size中的参数顺序。
    最易混淆的就是矩阵Mat函数at中的坐标(i,j)与(x,y)正好相反,i代表行坐标,j代表列坐标。与Matlab中矩阵坐标是相同了,但与Point坐标就相反了,很费劲。下面是Mat::at的原型。
    [cpp]
    template T& Mat::at(int i) const
    template const T& Mat::at(int i) const
    template T& Mat::at(int i, int j)
    template const T& Mat::at(int i, int j) const
    template T& Mat::at(Point pt)
    template const T& Mat::at(Point pt) const
    template T& Mat::at(int i, int j, int k)
    template const T& Mat::at(int i, int j, int k) const
    template T& Mat::at(const int* idx)
    template const T& Mat::at(const int* idx) const
    [/cpp]
    参数含义如下:
    i – Index along the dimension 0
    j – Index along the dimension 1
    k – Index along the dimension 2
    pt – Element position specified as Point(j,i) .
    idx – Array of Mat::dims indices.