OpenCV的opencv与opencv2两个include文件夹有何区别及用途疑问
嘿,这个问题问到点子上了,我跟OpenCV打交道这么久,对它的头文件门儿清,给你唠明白:
OpenCV中
opencv与opencv2文件夹的区别及引用建议 一、opencv文件夹的核心用途
- 兼容旧代码:这个文件夹是为了照顾OpenCV 1.x版本的遗留项目而生的,里面的头文件(比如你提到的
cv.h)都是基于C风格的旧API设计的,很多早年的教程、老项目还在依赖这些接口。 - 过渡衔接:它还包含一些衔接新旧版本的过渡代码,方便那些从1.x逐步迁移到2.x及以后版本的项目,不至于一下子全改完。
二、头文件引用:选opencv/cv.h还是opencv2/opencv.h?
- 新项目首选
opencv2/opencv.h:这是OpenCV 2.x及之后版本的统一入口头文件,它会自动帮你引入所有opencv2子目录下的核心头文件,而且里面都是现代的C++风格API,封装更友好、功能更完善,写新代码完全没必要碰旧的C接口。 - 仅维护老项目时用
opencv/cv.h:如果是接手别人的旧项目,或者某些特殊场景必须用到旧API的功能,才需要引用这个,现在这种情况已经越来越少了。
三、两个文件夹里的highgui.h区别在哪?
opencv/highgui.h:对应旧的C风格图形界面接口,比如cvNamedWindow()、cvShowImage()这类纯C函数,都是用C语言的结构体和回调来实现的,灵活性差一点,也容易出内存问题。opencv2/highgui/highgui.h(新版本可能是opencv2/highgui.hpp):是新的C++风格接口,用类封装了窗口、图像显示等功能,比如cv::namedWindow()、cv::imshow(),面向对象的设计更符合现代编程习惯,也更安全可靠。
内容的提问来源于stack exchange,提问作者jwm
相关产品推荐
相关产品推荐

