OpenCV坐标方向
OpenCV坐标方向和Matlab不同,x轴沿水平方向,y轴沿竖直方向。因为Matlab中数据按列存储,而OpenCV中数据按行存储。
OpenCV函数变量中涉及位置信息的有以下几类:
- x y
点的坐标用(x,y)表示,x在前,y在后,例如
[cpp]CvPoint cvPoint(int x, int y)[/cpp]
cv::Point_与CvPoint类似。 - 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] - 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.