4

我正在通过调用创建一个 CvMat 结构

cvCreateMat(1,1,CV_32FC3);

该结构由后续的 OpenCV 函数调用填充,并用三个值填充(据我了解,这是一个 1x1 数组,附加深度为 3)。

那么如何访问这三个值呢?一个正常的调用

CV_MAT_ELEM(myMat,float,0,0)

不会做这项工作,因为它只需要数组维度索引而不是它的深度。那么我怎样才能得到这些值呢?

谢谢!

4

2 回答 2

5

访问 cv::Mat 的一般方法是

type value=myMat.at<cv::VecNT>(j,i)[channel]

对于您的情况:

Mat mymat(1,1,CV_32FC3,cvScalar(0.1,0.2,0.3));
float val=mymat.at<Vec3f>(0,0)[0];

所有类型都使用类 cv::VecNT 定义,其中 T 是类型,N 是向量元素的数量。

于 2013-04-19T07:03:14.483 回答
5

CV_32FC3是一个 32 位浮点数的三通道矩阵。您可以通过声明一个具有 3 个浮点数的结构元素并使用CV_MAT_ELEM. 例如:

typedef struct element {
        float cn1;
        float cn2;
        float cn3;
} myElement;

myElement data[N] = ...;
CvMat mat = cvMat(1, 1, CV_32FC2, data);

float channel1 = CV_MAT_ELEM(mat, float, 0, 0).cn1;
float channel2 = CV_MAT_ELEM(mat, float, 0, 0).cn2;
float channel3 = CV_MAT_ELEM(mat, float, 0, 0).cn3;

编辑:

访问每个通道的另一种方法是使用底层ptr结构:

mat.ptr<float>(x, y) [channel];
于 2013-04-19T06:40:04.283 回答