我是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,那么将代码从IplImage
thingy转换为Mat
thingy 应该很容易(当您键入时,它会删除可能的函数,变量等列表)
谢谢您的帮助.
我也发现自从发布这个问题以来,带有Mat
作为参数的函数可以IplImage
直接取代该Mat
参数,这使得如果已经将代码分解为方便的函数,则可以很容易地更新代码.只需将函数参数更改IplImage*
为Mat
,然后修改函数即可Mat
.调用该函数的其他代码应该仍然可以正常工作(根据我的经验).