OpenCV中打印CvMat的元素(2)

#include <cv.h>    #include <stdio.h>    #include <highgui.h>       #pragma comment( lib, "cv.lib" )    #pragma comment( lib, "cxcore.lib" )    #pragma comment( lib, "highgui.lib" )       #define CV_MAT_ELEM_2(mat,type,row,col,cha)  (((type*)((mat).data.ptr+row*(mat).step))[2*col+cha])    #define CV_MAT_ELEM_3(mat,type,row,col,cha)  (((type*)((mat).data.ptr+row*(mat).step))[3*col+cha])    #define CV_MAT_ELEM_4(mat,type,row,col,cha)  (((type*)((mat).data.ptr+row*(mat).step))[4*col+cha])       void ecvOutputMatrix(CvMat *mat)   {       for(int i=0;i<mat->rows;i++)       {           for(int j=0;j<mat->cols;j++)           {               int type=cvGetElemType(mat);               switch(type)               {               case CV_8UC1:                   printf("%d\t",CV_MAT_ELEM(*mat,uchar,i,j));                   break;               case CV_8UC2:                   printf("(%d,%d)\t",CV_MAT_ELEM_2(*mat,uchar,i,j,0),                                       CV_MAT_ELEM_2(*mat,uchar,i,j,1));                   break;               case CV_8UC3:                   printf("(%d,%d,%d)\t",CV_MAT_ELEM_3(*mat,uchar,i,j,0),                                       CV_MAT_ELEM_3(*mat,uchar,i,j,1),                                       CV_MAT_ELEM_3(*mat,uchar,i,j,2));                   break;               case CV_8UC4:                   printf("(%d,%d,%d,%d)\t",CV_MAT_ELEM_4(*mat,uchar,i,j,0),                                       CV_MAT_ELEM_4(*mat,uchar,i,j,1),                                       CV_MAT_ELEM_4(*mat,uchar,i,j,2),                                       CV_MAT_ELEM_4(*mat,uchar,i,j,3));                   break;                  case CV_8SC1:                   printf("%d\t",CV_MAT_ELEM(*mat,signed char,i,j));                   break;               case CV_8SC2:                   printf("(%d,%d)\t",CV_MAT_ELEM_2(*mat,signed char,i,j,0),                                       CV_MAT_ELEM_2(*mat,signed char,i,j,1));                   break;               case CV_8SC3:                   printf("(%d,%d,%d)\t",CV_MAT_ELEM_3(*mat,signed char,i,j,0),                                       CV_MAT_ELEM_3(*mat,signed char,i,j,1),                                       CV_MAT_ELEM_3(*mat,signed char,i,j,2));                   break;               case CV_8SC4:                   printf("(%d,%d,%d,%d)\t",CV_MAT_ELEM_4(*mat,signed char,i,j,0),                                       CV_MAT_ELEM_4(*mat,signed char,i,j,1),                                       CV_MAT_ELEM_4(*mat,signed char,i,j,2),                                       CV_MAT_ELEM_4(*mat,signed char,i,j,3));                   break;                  case CV_16UC1:                   printf("%d\t",CV_MAT_ELEM(*mat,unsigned short,i,j));                   break;               case CV_16UC2:                   printf("(%d,%d)\t",CV_MAT_ELEM_2(*mat,unsigned short,i,j,0),                                       CV_MAT_ELEM_2(*mat,unsigned short,i,j,1));                   break;               case CV_16UC3:                   printf("(%d,%d,%d)\t",CV_MAT_ELEM_3(*mat,unsigned short,i,j,0),                                       CV_MAT_ELEM_3(*mat,unsigned short,i,j,1),                                       CV_MAT_ELEM_3(*mat,unsigned short,i,j,2));                   break;               case CV_16UC4:                   printf("(%d,%d,%d,%d)\t",CV_MAT_ELEM_4(*mat,unsigned short,i,j,0),                                       CV_MAT_ELEM_4(*mat,unsigned short,i,j,1),                                       CV_MAT_ELEM_4(*mat,unsigned short,i,j,2),                                       CV_MAT_ELEM_4(*mat,unsigned short,i,j,3));                   break;                  case CV_16SC1:                   printf("%d\t",CV_MAT_ELEM(*mat,short,i,j));                   break;               case CV_16SC2:                   printf("(%d,%d)\t",CV_MAT_ELEM_2(*mat,short,i,j,0),                                       CV_MAT_ELEM_2(*mat,short,i,j,1));                   break;               case CV_16SC3:                   printf("(%d,%d,%d)\t",CV_MAT_ELEM_3(*mat,short,i,j,0),                                       CV_MAT_ELEM_3(*mat,short,i,j,1),                                       CV_MAT_ELEM_3(*mat,short,i,j,2));                   break;               case CV_16SC4:                   printf("(%d,%d,%d,%d)\t",CV_MAT_ELEM_4(*mat,short,i,j,0),                                       CV_MAT_ELEM_4(*mat,short,i,j,1),                                       CV_MAT_ELEM_4(*mat,short,i,j,2),                                       CV_MAT_ELEM_4(*mat,short,i,j,3));                   break;                  case CV_32SC1:                   printf("%d\t",CV_MAT_ELEM(*mat,int,i,j));                   break;               case CV_32SC2:                   printf("(%d,%d)\t",CV_MAT_ELEM_2(*mat,int,i,j,0),                                       CV_MAT_ELEM_2(*mat,int,i,j,1));                   break;               case CV_32SC3:                   printf("(%d,%d,%d)\t",CV_MAT_ELEM_3(*mat,int,i,j,0),                                       CV_MAT_ELEM_3(*mat,int,i,j,1),                                       CV_MAT_ELEM_3(*mat,int,i,j,2));                   break;               case CV_32SC4:                   printf("(%d,%d,%d,%d)\t",CV_MAT_ELEM_4(*mat,int,i,j,0),                                       CV_MAT_ELEM_4(*mat,int,i,j,1),                                       CV_MAT_ELEM_4(*mat,int,i,j,2),                                       CV_MAT_ELEM_4(*mat,int,i,j,3));                   break;                  case CV_32FC1:                   printf("%lf\t",CV_MAT_ELEM(*mat,float,i,j));                   break;               case CV_32FC2:                   printf("(%d,%d)\t",CV_MAT_ELEM_2(*mat,float,i,j,0),                                       CV_MAT_ELEM_2(*mat,float,i,j,1));                   break;               case CV_32FC3:                   printf("(%d,%d,%d)\t",CV_MAT_ELEM_3(*mat,float,i,j,0),                                       CV_MAT_ELEM_3(*mat,float,i,j,1),                                       CV_MAT_ELEM_3(*mat,float,i,j,2));                   break;               case CV_32FC4:                   printf("(%d,%d,%d,%d)\t",CV_MAT_ELEM_4(*mat,float,i,j,0),                                       CV_MAT_ELEM_4(*mat,float,i,j,1),                                       CV_MAT_ELEM_4(*mat,float,i,j,2),                                       CV_MAT_ELEM_4(*mat,float,i,j,3));                   break;                  case CV_64FC1:                   printf("%lf\t",CV_MAT_ELEM(*mat,double,i,j));                   break;               case CV_64FC2:                   printf("(%d,%d)\t",CV_MAT_ELEM_2(*mat,double,i,j,0),                                       CV_MAT_ELEM_2(*mat,double,i,j,1));                   break;               case CV_64FC3:                   printf("(%d,%d,%d)\t",CV_MAT_ELEM_3(*mat,double,i,j,0),                                       CV_MAT_ELEM_3(*mat,double,i,j,1),                                       CV_MAT_ELEM_3(*mat,double,i,j,2));                   break;               case CV_64FC4:                   printf("(%d,%d,%d,%d)\t",CV_MAT_ELEM_4(*mat,double,i,j,0),                                       CV_MAT_ELEM_4(*mat,double,i,j,1),                                       CV_MAT_ELEM_4(*mat,double,i,j,2),                                       CV_MAT_ELEM_4(*mat,double,i,j,3));                   break;               }           }           putchar('\n');       }   }   int main()   {       int m[]={               255, 255, 255,               255, 255, 255,               128, 200,1               };          CvMat M=cvMat(1,3,CV_32SC3,m);       ecvOutputMatrix(&M);       cvReleaseData(&M);          IplImage *image=cvLoadImage("lena.jpg",-1);       CvMat mat;       cvGetMat(image,&mat);       ecvOutputMatrix(&mat);       cvReleaseImage(&image);          return 0;   }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5700f8768a398fa5a8235a3d51e5d76e.html