一)cvCreateMat创建和分配数据
CvCreateMat会创建CvMat,并为CvMat分配数据。cvCreateMat可以配合cvInitMatHeader来初始化CvMat对象。
因为CvCreateMat创建的CvMat,对象在堆上,数据也在堆上,所以cvInitMatHeader在指定新的数据所在的位置的同时,也将CvMat::hdr_refcount和CvMat::refcount都置为0,以便cvReleaseMat释放CvMat对象和数据。
- #include <cv.h>
- #include <stdio.h>
- int main()
- {
- double a[9]={1,2,3,4,5,6,7,8,9};
- double* data=0;
-
- CvMat *pm=cvCreateMat(3,3,CV_64FC1);
- cvInitMatHeader(pm,3,3,CV_64FC1,a);
- data=pm->data.db;
- for(int i=0;i<3;i++)
- {
- for(int j=0;j<3;j++)
- {
- printf("%3.lf",data[i*3+j]);
- }
- printf("\n");
- }
- printf("\n");
-
- cvReleaseData(pm);
- cvReleaseMat(&pm);
-
- return 0;
- }
二)cvCreateMatHeader创建
cvCreateMatHeader只会创建CvMat,不会为CvMat分配数据。cvCreateMatHeader可以配合cvInitMatHeader来初始化CvMat对象。
因为cvCreateMatHeader创建的CvMat,对象在堆上,所以cvInitMatHeader在指定新的数据所在的位置的同时,也将CvMat::hdr_refcount置为0,以便cvReleaseMat释放CvMat<