OpenCV CvMat 保存读取文件

本文详细介绍了使用OpenCV库将CvMat数据结构读写到文件中及从文件中读取数据的方法,包括如何根据不同数据类型进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV 读写CvMat到文件中以及从文件之中读取数据:

int cvx_dump_vector(CvMat *mat,char *filename,int type){
 int i,j;
 FILE *fp=fopen(filename,"w+");
 if(fp!=NULL){
  fprintf(fp,"%d %d\n",mat->rows,mat->cols);
  for(i=0;i<mat->rows;i++){
   for(j=0;j<mat->cols;j++){
    switch(type)
    {
     case 0:
      fprintf(fp,"%d ",(mat->data.i+i*mat->step/4)[j]);
      break;
     case 1:
      fprintf(fp,"%f ",(mat->data.fl+i*mat->step/4)[j]);
      break;
     case 2:
      fprintf(fp,"%lf ",(mat->data.db+i*mat->step/8)[j]);
      break;
    }
   }
   fprintf(fp,"\n");
  }
  fclose(fp);
 }
 return 0;
}
CvMat *cvx_load_vector(char* filename,int type){
 int rows,cols,i,j;
 CvMat *mat=NULL;
 FILE *fp=fopen(filename,"r+");
 if(fp!=NULL){
  fscanf(fp,"%d %d",&rows,&cols);
  switch(type){
   case 0:
    mat=cvCreateMat(rows,cols,CV_32SC1);
    break;
   case 1:
    mat=cvCreateMat(rows,cols,CV_32FC1);
    break;
   case 2:
    mat=cvCreateMat(rows,cols,CV_64FC1);
    break;
  }
  for(i=0;i<mat->rows;i++){
   for(j=0;j<mat->cols;j++){
    switch(type)
    {
     case 0:
      fscanf(fp,"%d",&(mat->data.i+i*mat->step/4)[j]);
      break;
     case 1:
      fscanf(fp,"%f",&(mat->data.fl+i*mat->step/4)[j]);
      break;
     case 2:
      fscanf(fp,"%lf",&(mat->data.db+i*mat->step/8)[j]);
      break;
    }
   }
 
  }
  fclose(fp);
 }
 return mat;
}

一定要注意和IplImage直接操作元素的方式的不同,IplImage的数据是一个uchar*类型,而CvMat数据是一个union类型,含有不同类型的指针。step是每一行的字节个数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值