python opencv 表示mat类型吗
推荐回答
、Mat类型:矩阵类型Matrix openCVMat维密集数据数组用处理向量矩阵、图像、直图等等见维数据 Mat3重要: 1、Mat mat = imread(const String* filename); 读取图像 2、imshow(const string frameName, InputArray mat); 显示图像 3、imwrite (const string& filename, InputArray img); 储存图像 Mat类型较CvMat与IplImage类型说更强矩阵运算能力支持见矩阵运算计算密集型应用CvMat与IplImage类型转化Mat类型减少计算间花费 A.Mat -> IplImage 同创建图像没复制数据 例: // 假设Mat类型imgMat图像数据存 IplImage pImg= IplImage(imgMat); B.Mat -> CvMat 与IplImage转换类似复制数据创建矩阵 例: // 假设Mat类型imgMat图像数据存 CvMat cvMat = imgMat; 二、CvMat类型与IplImage类型:图像类型 openCVMat类型与CvMatIplImage类型都代表显示图像Mat类型侧重于计算数性较高openCVMat类型计算进行优化CvMatIplImage类型更侧重于图像openCV其图像操作(缩放、单通道提取、图像阈值操作等)进行优化 补充:IplImage由CvMat派CvMat由CvArr派即CvArr -> CvMat -> IplImage CvArr用作函数参数论传入CvMat或IplImage内部都按CvMat处理 1.CvMat A.CvMat-> IplImage IplImage* img = cvCreateImage(cvGetSize(mat),8,1);cvGetImage(matI,img); cvSaveImage("rice1.bmp",img); B.CvMat->Mat 与IplImage转换类似选择否复制数据 Mat::Mat(const CvMat* m, bool copyData=false); openCV没向量(vector)数据结构任何候我要表示向量用矩阵数据表示即 CvMat类型与我线性代数课程向量概念相比更抽象比CvMat元素数据类型并仅限于基础数据类型比面创建二维数据矩阵: CvMat* cvCreatMat(int rows ,int cols , int type); type任意预定义数据类型比RGB或者别通道数据我便CvMat矩阵表示丰富彩图像 2.IplImage 类型关系我说IplImage类型继承自CvMat类型包括其变量解析图像数据 IplImage类型较CvMat参数比depthnChannels普通矩阵类型通深度通道数同表示用32位表示RGB+Alpha.图像处理我往往深度与通道数处理做OpenCV图像表示种优化案 IplImage图像另种优化变量origin----原点计算机视觉处理重要便原点定义清楚图像源编码格式甚至操作系统都原选取产影响弥补点openCV允许用户定义自原点设置取值0表示原点位于图片左角1表示左角 dataOrder参数定义数据格式IPL_DATA_ORDER_PIXELIPL_DATA_ORDER_PLANE两种取值前者便于像素同通道数据交叉排列者表示所通道按顺序平行排列 IplImage类型所额外变量都图像表示与计算能力优化 A.IplImage -> Mat IplImage* pImg = cvLoadImage("lena.jpg");Mat img(pImg,0); // 0复制影像pImg与imgdata共用同记忆体位置header各自B.IplImage -> CvMat 1:CvMat mathdr, *mat = cvGetMat( img, &mathdr ); 2:CvMat *mat = cvCreateMat( img->height, img->width, CV_64FC3 );cvConvert( img, mat ); C.IplImage*-> BYTE* BYTE* data= img->imageData; CvMatIplImage创建区别: 1、建立矩阵第参数行数第二参数列数 CvMat* cvCreateMat( int rows, int cols, int type ); 2、建立图像CvSize第参数宽度即列数;第二参数高度即行数 CvMat矩阵相反 IplImage* cvCreateImage(CvSize size, int depth, int channels ); CvSize cvSize( int width, int height ); IplImage内部buffer每行按4字节齐CvMat没限制 补充: A.BYTE*-> IplImage* img= cvCreateImageHeader(cvSize(width,height),depth,channels); cvSetData(img,data,step); //首先由cvCreateImageHeader()创建IplImage图像制定图像尺寸深度通道数; //由cvSetData()根据BYTE*图像数据指针设置IplImage图像数据数据 //其step指定该IplImage图像每行占字节数于1通道IPL_DEPTH_8U图像step等于width