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