检索CV_32FC3 CvMat的元素

Retrieve elements of a CV_32FC3 CvMat?

本文关键字:元素 CvMat 32FC3 CV 检索      更新时间:2023-10-16

我正在通过调用

创建一个CvMat结构
cvCreateMat(1,1,CV_32FC3);

该结构由随后的OpenCV函数调用填充,并填充三个值(据我所知,这是一个1x1数组,额外深度为3)。

那么我如何访问这三个值呢?对

的正常调用
CV_MAT_ELEM(myMat,float,0,0)

不能完成这项工作,因为它只期望数组的维度索引而不期望数组的深度。我怎么得到这些值呢?

谢谢!

访问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是向量元素的个数。

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];