opencv 的mat经常用,无奈人老记性不好,每次用的时候总忘记然后出bug,总结下常用的东西:
1.定义Mat
定义Mat并初始化
cv::Mat R;
//给R初始化为3*3矩阵:
R(Mat::eye(3, 3, CV_64F));
//给R初始化为3*1向量:
R(Mat::zeros(3, 1, CV_64F));
2. 访问数组Mat的不同方法(按效率从高到低排列)、
2.1 指针按照向量形式访问
float* myptr = (float*)R.data;
for (int j = 0; j < 9; j++)
{
cameraBuf.RMat[j] = myptr[j];
}
2.2 指针按照逐行访问
如果是向量,可以这样访问:
cv::Mat T; //3*1向量
for (int k = 0; k < 3; k++)
{
cameraBuf.TVec[k] = *(T.ptr<float>(k));
}
如果是矩阵,则要多一层循环,即:
2.3 逐个元素访问
for (int i = 0; i < h, i++)
for (int j = 0; j < w; j++)
float a = R.at<float>(i, j);