opencv中CvMat结构与矩阵的创建与访问
2016-03-23 21:59
459 查看
一、CvMat结构:
type:表示数据元素的类型,其格式为:CV_8UC1,表示8位无符号数单通道类型,也可以是16、32、64位,有符号,双通道、三通道等类型。
step:每一行的字节数
union:在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址,一般这个空间选择为union中数据类型占空间最大。
二、矩阵的创建:四种方法
1、直接调用cvCreateMat
2、
3、
4、
注意:
//其中pmat1、pmat2、pmat4需要调用cvReleaseMat函数释放空间;
//pmat3不需要,因为它所存储的是int数组的地址,并没有为pmat3分配空。
三、矩阵的访问
typedef struct CvMat { int type; int step; /* for internal use only */ int* refcount; int hdr_refcount; union { uchar* ptr; short* s; int* i; float* fl; double* db; } data;
type:表示数据元素的类型,其格式为:CV_8UC1,表示8位无符号数单通道类型,也可以是16、32、64位,有符号,双通道、三通道等类型。
step:每一行的字节数
union:在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址,一般这个空间选择为union中数据类型占空间最大。
二、矩阵的创建:四种方法
1、直接调用cvCreateMat
CvMat* pmat1 = cvCreateMat(6, 6, CV_8UC1);
2、
CvMat* pmat2 = cvCreateMatHeader(5, 9, CV_32FC1); cvCreateData(pmat2);
3、
CvMat pmat3; int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; cvInitMatHeader(&pmat3, 2, 5, CV_8UC1,a);
4、
CvMat* pmat4 = cvCloneMat(pmat1);
注意:
//其中pmat1、pmat2、pmat4需要调用cvReleaseMat函数释放空间;
//pmat3不需要,因为它所存储的是int数组的地址,并没有为pmat3分配空。
cvReleaseMat(&pmat1); cvReleaseMat(&pmat2); cvReleaseMat(&pmat4);
三、矩阵的访问
//矩阵维度与通道 float data[18] = { 30, 60, 40, 60, 50, 40, 67, 88, 55, 33, 22, 97, 59, 69, 32, 46, 25, 45 }; //2维单通道 printf("二维单通道:\n"); CvMat mat; cvInitMatHeader(&mat, 3, 6, CV_32FC1, data); for (int i = 0; i < mat.rows; i++) { for (int j = 0; j < mat.cols; j++) { float value = cvGetReal2D(&mat,i,j); printf("%f ", value); } printf("\n"); } //2维2通道 printf("二维双通道:\n"); CvMat mat2; cvInitMatHeader(&mat2, 3, 3, CV_32FC2, data); for (int i = 0; i < mat2.rows; i++) { for (int j = 0; j < mat2.cols; j++) { CvScalar value = cvGet2D(&mat2, i, j); printf("(%f %f)", value.val[0],value.val[1]); } printf("\n"); } //2维3通道 printf("二维三通道:\n"); CvMat mat3; cvInitMatHeader(&mat3, 3, 2, CV_32FC3, data); for (int i = 0; i < mat3.rows; i++) { for (int j = 0; j < mat3.cols; j++) { CvScalar value = cvGet2D(&mat2, i, j); printf("(%f %f %f)", value.val[0], value.val[1],value.val[2]); } printf("\n"); }
相关文章推荐
- MapReduce实现TopK
- 为什么要关注架构设计?
- linux目录作用详解(超详细,树状排版)
- Linux设备驱动之Ioctl控制
- linux多线程-----同步机制(互斥量、读写锁、条件变量)
- linux分享六:nohup与&,守护进程
- Linux IPC
- linux基本操作命令
- shell入门
- Impala 2、Impala Shell 和 Impala SQL
- Mesh Compression 学习 -- OpenCtm 创建mesh文件
- Cordys BOP 4.3流程实例监控及流程恢复、流程环节配置Method问题的分析处理
- OpenGL学习(一) OpenGL简介
- centos7.2中搭建ARM开发环境所需工具初体验
- Linux下SVN Server 的使用及权限配置权限
- SELinux配置property
- linux 知识体系精炼版
- 【Linux多进程同步】记录锁
- (在线文库系统)centos nginx mysql php openoffice pdf2swf pdf2image
- linux系统学习