我正在通过调用创建CvMat结构
cvCreateMat(1,1,CV_32FC3);
Run Code Online (Sandbox Code Playgroud)
此结构由后续的OpenCV函数调用填充,并用三个值填充(据我所知,这是一个1x1数组,附加深度为3)。
那么如何访问这三个值?正常拨打
CV_MAT_ELEM(myMat,float,0,0)
Run Code Online (Sandbox Code Playgroud)
不会做这项工作,因为它只期望数组的维数索引,而不期望它的深度。那么如何获得这些值?
谢谢!
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;
Run Code Online (Sandbox Code Playgroud)
编辑:
访问每个通道的另一种方法是使用底层ptr结构:
mat.ptr<float>(x, y) [channel];
Run Code Online (Sandbox Code Playgroud)
访问cv :: Mat的一般方法是
type value=myMat.at<cv::VecNT>(j,i)[channel]
Run Code Online (Sandbox Code Playgroud)
对于您的情况:
Mat mymat(1,1,CV_32FC3,cvScalar(0.1,0.2,0.3));
float val=mymat.at<Vec3f>(0,0)[0];
Run Code Online (Sandbox Code Playgroud)
所有类型均使用类cv :: VecNT定义,其中T为类型,N为向量元素的数量。