⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matcal.cpp

📁 这是一个用opencv求逆矩阵的程序
💻 CPP
字号:
// matcal.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
int countcolumn(FILE * fp)
{

 char sh;
  int lie;
  
  lie=0;
 sh=getc(fp);
  while(sh==' '||sh=='\n')
   sh=getc(fp);

      while((sh!='\n')&&(sh!=EOF))
     {
       sh=getc(fp);
         if(sh==' '||sh=='\n'||sh==EOF)
          lie++;
        while(sh==' ')
         sh=getc(fp);
       }

    return(lie);
  }

int countrow(FILE * fp)
  { char sh;
    int flag=0;
    int n=0;
    rewind(fp);
    sh=getc(fp);
    while(sh==' '||sh=='\n')
     sh=getc(fp);
     while(flag==0)
       {
        while((sh!='\n')&&(sh!=EOF))
         {
         if(sh!=' ') flag=1;
         else ;
          sh=getc(fp);
          }

           if(sh=='\n')
           {
           if(flag==1)
             {
              n++;
              flag=0;
              }
             else flag=1;
             sh=getc(fp);
            }
           else if(sh==EOF)
          {
           if(flag==1)
             {
              n++;
              flag=0;
              }
             else flag=1;
             }
        }
        return(n);
   }
void readin(FILE * fp,float * mat,int num)
 {
    int i;
    rewind(fp);
      for(i=0;i<num;i++)
			
          fscanf(fp,"%f",&mat[i]);
}
   
void main(int   argc,   char   *argv[])
{
     int m,n,z,w;
   	FILE * fp1;
   	FILE * fp2;

	float *a;
	float *b;
	CvMat * ymatrix;
    CvMat * amatrix;
	CvMat * invertmatrix;
    CvMat * resultmatrix;
	if((fp1=fopen("c:\\input1.txt","rt"))==NULL)
	{
		printf("cannot open file");
	    exit(0);
	}
      
   if((fp2=fopen("c:\input2.txt","rt"))==NULL)
	{
		printf("cannot open file");
	    exit(0);
	}
    else printf("open successfully\n");
	
	w=countcolumn(fp1);
    z=countrow(fp1);
	
    m=countcolumn(fp2);
    n=countrow(fp2);

	printf("%d%d%d%d",z,w,n,m);
    a=(float *)malloc(sizeof(float)*(n*m));
	b=(float *)malloc(sizeof(float)*(z*w));
    readin(fp1,b,z*w);
    readin(fp2,a,n*m);
//	for(int i=0;i<z*w;i++)
//		printf("%6.1f",b[i]);
//	printf("\n");
//   for(i=0;i<n*m;i++)
//		printf("%6.1f",a[i]);

   ymatrix=cvCreateMat(z,w,CV_32FC1);
   amatrix=cvCreateMat(n,m,CV_32FC1);
   invertmatrix=cvCreateMat(m,n,CV_32FC1);
   resultmatrix=cvCreateMat(m,w,CV_32FC1);
   cvSetData(ymatrix,b,CV_AUTOSTEP);
   cvSetData(amatrix,a,CV_AUTOSTEP);

  //  cvSolve(amatrix,ymatrix,resultmatrix,CV_SVD);
   cvInvert(amatrix,invertmatrix,CV_SVD);
   cvMatMulAdd(invertmatrix,ymatrix,0,resultmatrix);
      
   printf("\nA:");   
  for(int i=0;i<n*m;i++){   
           if(i%m==0)    printf("\n");   
           printf("%f\t",amatrix->data.fl[i]);   
   }   
          
    for(i=0;i<m*n;i++){   
           if(i%n==0)    printf("\n");   
           printf("%f\t",invertmatrix->data.fl[i]);   
   }   
     printf("\n\nb:\n");   
   for(   i=0;i<z*w;i++){   
           printf("%f\t\n",ymatrix->data.fl[i]);   
   }       
   printf("\n\nX:\n");   
   for(   i=0;i<m*w;i++){   
           printf("%f\t",resultmatrix->data.fl[i]);   
   }   
          
   

   cvReleaseMat(&ymatrix);
   cvReleaseMat(&amatrix);
   cvReleaseMat(&resultmatrix);
   free(a);
   free(b);
   fclose(fp1);
   fclose(fp2);
  getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -