OpenGL与OpenCV有什么区别?
OpenCV
:Open Source Computer Vision Library,是一个跨平台的计算机视觉库
(主要操作对象是图像
)
OpenCV是由英特尔
公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用
OpenCV可用于开发实时的图像处理
、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理
OpenGL
:Open Graphics Library,是个定义了一个跨编程语言、跨平台的应用程序接口(API
)的规格,它用于生成二维
、三维图像
。这个接口由近三百五十个
不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象
。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD
、虚拟实境
、科学可视化程序
和电子游戏开发
总结
:两者的区别就是Computer Vision
和Computer Graphics
这两个学科之间的区别,前者专注于从采集
到的视觉图像中获取信息
,是用机器来理解图像
;后者是用机器绘制
合适的视觉图像给人看
为什么存在OpenCV?
计算机视觉市场巨大而且持续增长,且这方面没有标准API,目前的计算机视觉软件大概有以下三种:
- 研究代码(慢,不稳定,独立并与其他库不兼容)
- 耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
- 依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)
这是目前的现状。而标准的API将简化计算机视觉程序和解决方案的开发。OpenCV致力于成为这样的标准API
OpenCV 与 OpenGL 的关系是什么?
OpenCV 2.3 之后的版本引入 OpenGL
在 2.3 之前 OpenCV 的渲染部分都是由 CPU 来实现
的,不论是画线还是把图片显示到屏幕上。这有两个问题,速度慢
,同时没法画三维物体
。引入 OpenGL 是为了借助 显卡的力量,显卡比 CPU 更擅长渲染
,同时显卡和 CPU 可以同时干活
。比方说,CPU 在获取摄像头画面然后检测人脸时,显卡在渲染三维的人脸网格模型和高精度抗锯齿的二维界面
OpenCV和OpenGL哪个更有前途?
OpenGL
的发展一直处于一种较为迟缓的态势,每次版本的提高新增的技术很少,大多只是对其中部分做出修改和完善。
1992年7月
,SGI公司发布了OpenGL的1.0版本
,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。
1995年
OpenGL的1.1版本
面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性
等等。OpenGL 1.5
又新增了“OpenGL Shading Language”,该语言是“OpenGL 2.0”的底核,用于着色对象、顶点着色以及片断着色技术的扩展功能
OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3DLabs
。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简
目前,随着DirectX
的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但厂商用户的认知程度并不高,未来的OpenGL发展前景迷茫
再来说说OpenCV
1999年1月,CVL项目启动。主要目标是人机界面,能被UI调用的实时计算机视觉库,为Intel处理器做了特定优化。
- 2000年6月,第一个开源版本OpenCV alpha 3发布。
- 2000年12月,针对linux平台的OpenCV beta 1发布。
- 2006年,支持Mac OS的OpenCV 1.0发布。
- 2009年9月,OpenCV1.2(beta2.0)发布。2009年10月1日,Version 2.0发布。
OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。
OpenCV 使用类BSDlisence,所以对非商业应用和商业应用都是免费
(FREE)的。
OpenCV 为Intel Integrated Performance PrimiTIves (IPP) 提供了透明接口。 这意味着如果有为特定处理器优化的的IPP 库, OpenCV 将在运行时自动加载这些库。
OpenCV提供的视觉处理算法非常丰富,并且他不分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中,目前这种移植在大学中经常作为相关专业本科生毕业设计或者研究生课题的选题。
OpenCV学术气息太强,功能虽多,但针对特定功能的优化不足,适合创建原型,不适合开发产品
总结:以上介绍了两者的发展史,至于谁更有前途,个人觉得都还行,OpenCV更有搞头