我是OpenCV的新手(现在大约2个月).我有Bradski和Kaehler的"学习OpenCV"一书.我的问题是,如果我想以2.0+的方式做所有事情,我何时应该使用矩阵(Mat)以及何时应该使用IplImage?
Bradky的书预先声明它是基于OpenCV 2.0编写的,并且它主要在其示例代码中使用IplImage,但是最新的在线文档使得它听起来像Mat现在是图像,蒙版等的全能数据类型,有点像Matlab中的基本矩阵.这让我想知道IplImage是否应该被认为是过时的.
那么,在编写新代码时,我是否应该完全避免使用IplImages?或者是否IplImages允许我做的重要事情,Mats不这样做?
谢谢.
Utk*_*nha 73
IplImage从一开始就一直在OpenCV.它是OpenCV的C接口的一部分.您需要IplImage自己为结构分配和释放内存.(还记得cvReleaseImage命令吗?)
新Mat结构是C++结构的一部分.显然它是面向对象的.此外,它为您管理所有内存!它保留了对它的引用的跟踪.然后引用数变为零,它会自动解除分配.这是一个极好的功能!
去吧Mat.如果您使用的是具有Intellisense的IDE,那么将代码从IplImagethingy转换为Matthingy 应该很容易(当您键入时,它会删除可能的函数,变量等列表)
谢谢您的帮助.
我也发现自从发布这个问题以来,带有Mat作为参数的函数可以IplImage直接取代该Mat参数,这使得如果已经将代码分解为方便的函数,则可以很容易地更新代码.只需将函数参数更改IplImage*为Mat,然后修改函数即可Mat.调用该函数的其他代码应该仍然可以正常工作(根据我的经验).