Opencv矩阵的维度与通道


矩阵与维度通道

1.cvInitMatHeader(&-1,3,6,CV-32FC1,data);创建一个三行六列的矩阵mat-1,并用data数组的初值初始化它,CV-32FC1表示这个矩阵里面的元素是32味float型的,并且是单通道的。

2.单通道用 float value,cvGetReal2D获取行列数和维度, 双通道和三通到用CvScalar, cvGet2D获取行列数和维度(其中D代表维度)。



(单通道)

#include"highgui.h"


int main(int argc, char* argv[])
{
float data[18] =
{
23,34.,56,67,97,98,
13,43,45,65,76,78,
23,45,56,79,90,76
};

CvMat mat;
cvInitMatHeader(&mat, 3, 6, CV_32FC1, data);  // CV_32FC1 是代表的是32位的单通道的  (3*6*1=18)

for (int y = 0; y < mat.rows; y++)
{
for (int x = 0; x < mat.cols; x++)
{

float value = cvGetReal2D(&mat, y, x); // 加Real的就是单通道的访问,这个是一个二维的矩阵,维是代表的一个点用几个坐标表示,  

printf("%f", value);
}
printf("\n");
}
return 0;

}

运行结果如下:

23.00000034.00000056.00000067.00000097.00000098.000000
13.00000043.00000045.00000065.00000076.00000078.000000
23.00000045.00000056.00000079.00000090.00000076.000000



(三通道)

#include "highgui.h"

#include "cv.h"

#include"cxcore.h"
#include"stdio.h"
#include"stdlib.h"

int main(int argc, char* argv[])
{
float data[18] =
{ 30,60,40,48,50,40,
67,65,12,69,28,97,
56,87,99,49,25,45 };
CvMat mat;
cvInitMatHeader(&mat, 3, 2, CV_32FC3, data);     //由于是三通道3×2×3=18  
for (int y = 0; y<mat.rows; y++)
{
for (int x = 0; x<mat.cols; x++)
{
CvScalar value = cvGet2D(&mat, y, x);   //取y行 x列 2维的  
printf("(%f  %f  %f)", value.val[0], value.val[1], value.val[2]);  //每个坐标点打印三个值;并且用括号括起来  
}
printf("\n");
}
return 0;
}

运行结果如下:

(30.000000  60.000000  40.000000)(48.000000  50.000000  40.000000)
(67.000000  65.000000  12.000000)(69.000000  28.000000  97.000000)
(56.000000  87.000000  99.000000)(49.000000  25.000000  45.000000)




猜你喜欢

转载自blog.csdn.net/HHCCWWlxy/article/details/77963016
今日推荐