我知道很多人对IplImage
和CvMat
之间的技术差异感兴趣。(是的,不是cv::Mat
(*),而是CvMat
。因此,让我们以实际为重点来清除差异。
CvMat
是IplImage
的引用版本吗?CvMat
只是IplImage
的包装纸吗?如果是这样,为什么他们也发展CvMat
?
我问这些问题是因为我认为IplImage
在整个搜索中是最受欢迎的,在我看来,它的帖子也最多。
仍然使用 IplImage 而不是更新的结构有什么好处?
(*)(我在这里也放了 c++ 标签,因为很多人也将其与 c++ 一起使用,而且有些库更喜欢IplImage
。
我建议您阅读《学习OpenCV》一书中的OpenCV原始数据类型段落。关于这两种数据类型之间的差异,有一个很大而很好的解释。
IplImage
来自英特尔图像处理库,根据文档:http://opencv.willowgarage.com/documentation/basic_structures.html#iplimage
这个问题还涉及CvMat
结构,您可能会注意到:OpenCV的cvMat的内存结构是什么?
至于哪个更有益:虽然在各种情况下,CvMat
或IplImage
在这里或那里可能存在轻微的速度差异 - 这取决于你想做什么。 例如,您是否需要在内存中共享矩阵结构?您是否需要有效地序列化或搜索等?申请很重要。
(从理论上讲,IplImage
提供的一个优势是,正如您所指出的,由于其血统,它通常与现有实现更兼容。
回答您的问题:
仍然使用IplImage而不是更新有什么好处 结构?
也许没有。由于某种原因,它已被开发人员弃用,我猜您仍然发现它很多的原因是因为遗留代码;因为人们仍然遵循旧的代码示例,而不知道该结构已被弃用,并且因为"学习OpenCV第一版"在OpenCV函数签名和数据结构方面已经过时,但仍然有很多人从OpenCV开始遵循它。
作为参考,Learning OpenCV 第 2 版应该在 2013 年 3 月发布,但不要引用我的话;)