【发布时间】:2015-12-02 11:54:46
【问题描述】:
我见过很多直接访问cv::Mat 的数据成员的OpenCV 代码。 cv::Mat 将指向数据的指针存储在 unsigned char* data 成员中。对数据成员的访问如下所示:
cv::Mat matUC(3,3,CV_8U)
int rowIdx = 1;
int colIdx = 1;
unsigned char val = matUC.data[ rowIdx * matUC.cols + colIdx]
我想知道这是否适用于像素类型不是unsigned char 的cv::Mat。
cv::Mat matF(3,3,CV_32F)
int rowIdx = 1;
int colIdx = 1;
float val = matF.data[ rowIdx * matF.cols + colIdx];
我的理解是需要进行类型转换才能正确访问元素。比如:
float val = ((float*)matF.data)[ rowIdx * matF.cols + colIdx];
我见过很多不使用类型转换的代码。所以我的问题是:类型转换是否必须访问正确的元素?
【问题讨论】:
-
试试:
float val = matF.at<float>(rowIdx, colIdx); -
请注意,
data[row * cols + col]仅适用于矩阵isContinuous()。如果您没有该信息,最安全的方法是matrix.ptr<type>(row)[col]。
标签: c++ opencv image-processing