#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; }
OpenCV中打印CvMat的元素(2)
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:http://www.heiqu.com/5700f8768a398fa5a8235a3d51e5d76e.html