您的位置:首页 > 运维架构

openCV 图像和矩阵的创建和访问

2013-08-20 11:14 387 查看
cvArr

cvMat 创建 五种方式,只分配具体空间,并没有付具体的值。

1, CvMat* cvCreateMat(int rows,int cols,int type);(分配内存,没有数据,包括文件头和文件体)

只创建文件头,不分配数据区的内存

2,CvMat* cvCreateMatHeader(int rows,int cols,int type);

3, CvMat* cvInitMatHeader(

cvMat* mat,

int rows,

int cols,

int type,

void* data = NULL,

int step = CV_AUTOSTEP)

4,构造函数 CvMat cvMat()

5,复制函数 CvMat* cvCloneMat()

矩阵赋值

loat vals[] = {};

CvMat mat;

CvMat* cvInitMatHeader(&mat,2,2,CV_32FC1,vals);

矩阵访问:

常用方式:

for(y=0;y<mat_1Chanel.rows;y++)

{

float* pp_float = (float*)(mat_1Chanel.data.ptr + y*mat_1Chanel.step);

for(x=0;x<mat_1Chanel.cols;x++)

{

float ptr = *pp_float++ ;

printf("%f",ptr);

}

}

另有函数

cvPtrND;cvGetND;cvGetRealDN;cvSetND;cvSetRealND;cvmGet;cvmSet;

图像创建,赋值与矩阵相似

图像的访问:

IplImage img = cvCreateImage(cvSize(30,60),8,1);

for(int y =0, y<img->height,y++)

{

uchar* ptr = (uchar*)(img->imageData + y*img->widthStep);

}

for(int x = 0,x<img->width,x++)

{

ptr[3*x + 1] = 255;

ptr[3*x + 2] = 255;

}

注意几个难点:

1, 图像的维度和通道的计算;

2,cvScalar在多通道中的使用;

3,图像的widthstep的使用

4,偏移量的计算memset(包括字节和通道)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: