Mat, CvMat & IplImage

本文介绍了OpenCV中Mat与IplImage等图像处理类的区别及使用方法,包括图像的创建、读取、显示和销毁过程。同时探讨了不同类型的图像数据结构如何在OpenCV中进行操作。

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

  • Mat是一个类(class)

    • Mat image默认大小为0,但是也可以设置初始值,通过Mat image(240,320,CV_8U,Scalar(100));
    • 使用Mat创建的图像,当对象超出范围时,内存会自动释放。
    • Mat创建的图像是浅复制,并不将原来图像的每个像素拷贝过来

      • Mat image1,image2;
      • image1=result;//这两个图像指向同一块内存
      • result.copyTo(image2);//这才是将像素都拷贝过去了。
    • if (!image.data){}//确认读入图像成功

      • data作为Mat类的一个成员变量,是一个指向图片申请的内存的指针,为0时表示没有图片读入。
  • CvMat是一个结构(struct)

    • CvMat* cvCreatMat(int rows ,int cols , int type);//矩阵变换函数; type定义了矩阵的元素,可以是32位浮点数型数据CV_32FC1,或者是无符号的8位三元组的整型数据CV_8UC3;type结构为CV_(S|U|F)C
  • IplImage也是一个结构(struct)

    • IplImage内部buffer每行按4字节对齐
    • 通过cvCreateImage创建后复制像素到创建的内存。之后还需要释放内存。
MatIplImage
创建图像Mat image;IplImage* image=cvCreateImage(CvSize(400,300), int depth, int channels);
读取图像image=imread(“luhan.jpg”);IplImage* cvLoadImage(“image.jpg”,int iscolor);//iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。
定义图像窗口namedWindow(“new window”,int flags=WINDOW_AUTOSIZE);/flags可以为WINDOW_NORMAL,用户可以改变窗口的大小;WINDOW_AUTOSIZE窗口大小会自动调整,无法手动改变。/cvNamedWindow(“new window”,unsigned long flags);/flags可以选择CV_WINDOW_AUTOSIZE,表示窗口尺寸与图像原始尺寸相同,也可以选择0,表示以固定的窗口尺寸显示图像/
显示图像imshow(“new window”,image);cvShowImage(“new window”,image);
写入图像imwrite(“result.bmp”,result);cvSaveImage(“result.bmp”,result)
图像销毁自动释放cvReleaseImage(image);
  • IplImage转换到Mat
    • IplImage* iplImage=cvLoadImage(“luhan.jpg”);
    • Mat image(iplImage,false);
      /*其中false是默认值,可以省略,表示数据不会被拷贝,上例中iplImage和image指向同一块数据,true的话表示会拷贝数据。拷贝了的话记得要释放内存哦,cvReleaseImage(&iplImage);
      最好还是用Mat创建啦!*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值