OpenCV
- OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
- opencv官网
- github源码
OpenGL
- OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。
- opengl官网
- 入门教程
OpenSceneGraph
- OpenSceneGraph 能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。OpenSceneGraph是一个开放源码,跨平台的图形开发包,它为诸如飞行器仿真,游戏,虚拟现实,科学计算可视化这样的高性能图形应用程序开发而设计。它基于场景图的概念,它提供一个在OpenGL之上的面向对象的框架,从而能把开发者从实现和优化底层图形的调用中解脱出来,并且它为图形应用程序的快速开发提供很多附加的实用工具。
Vulkan
- Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织(Khronos Group)在2015年游戏开发者大会(GDC)上发表。科纳斯最先把VulkanAPI称为“下一代OpenGL行动”(next generation OpenGL initiative)或“glNext”, 但在正式宣布Vulkan之后这些名字就没有再使用了。就像OpenGL,Vulkan针对实时3D程序(如电子游戏)设计,Vulkan并计划提供高性能和低CPU管理负担(overhead),这也是Direct3D12和AMD的Mantle的目标。Vulkan兼容Mantle的一个分支,并使用了Mantle的一些组件。
WebGL
- WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。
OpenCL
- OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。
CUDA
- CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。
DirectX
- DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口,是一种应用程序接口(API)。DirectX可以让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。DirectX已被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发。
Direct3D
- 由微软公司所制定的3D规格界面,与Windows 95和Windows NT操作系统兼容性好,可绕过图形显示接口(GDI)直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度。Direct 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手树立的3D API规范,微软公司拥有该库版权,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。自1996年发布以来,Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可,现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。但它也有缺陷,由于是以COM接口形式提供的,所以较为复杂,稳定性差,另外,目前只在Windows平台上可用。
DirectX和Direct3D区别与联系
- direct3D只是directX其中一个模块。
- DirectX是由很多API组成的,按照性质分类,可以分为四大部分:显示部分、声音部分、输入部分和网络部分。
- 显示部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D)。前者主要负责2D图像加速,它包括很多方面:我们播放DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw;后者则主要负责3D效果的显示,比如CS中的场景和人物等,都是使用了DirectX的Direct3D。
- 声音部分中最主要的API是DirectSound,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。比如声卡兼容,就是利用了DirectSound来解决的。
- 输入部分DirectInput可以支持很多的游戏输入设备,它能够让这些设备充分发挥最佳状态和全部功能。除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。
- 网络部分DirectPlay主要就是为了具有网络功能游戏而开发的,提供了多种连接方式,TPC/IP,IPX,Modem,串口等,让玩家可以用各种联网方式来进行对战,此外也提供网络对话功能及保密措施。
vtk是一个算法库,里面包括了很多挺不错的算法,如果做有限元云图,等值线,特别是医疗方面的算法,有很大的参加价值,我曾经把它的等值线算法提取出来
一个类就可以实现,主要函数就三四个,而且同时实现了云图,等值线,比网上的追踪算法要简单许多,它是一种栅格算法,国外的的维基百科有介绍,但是维基百科上的介绍和vtk的也不完全一样,虽然思路是一致的。vtk的渲染效率应该不是很快,里面没有集成八叉树等场景管理的算法,它的主要目的也不是渲染,而是算法。
而且它的架构也是一种管道流的方法,输入数据经过一系列的算法处理后,最终形成点,线,面,存入vtkPolyData里面,然后在屏幕上绘制出来。
使用vtk主要有两种方法,第一种就是参考它的算法,直接抽也来,用自己的数据结构实现,这种方法方法可以脱离vtk, 直接加入到自己的软件里面,缺点就是提出麻烦,需要对vtk比较熟悉
第二种方法就是用vtk的数据结构,算法部分直接用vtk的库,然后最终的点线面数据从vktPolyData提取出来,用自己的代码绘制。缺点就是如果只用某种算法,比如它的等值线算法的话,也需要引用它的好几个库,显得太臃肿,优点是不用提取算法,而且可以直接的使用它提供的多种算法,本人两种方法都用过。
osg是一种场景图的方法,每个opengl相关的函数都是一个节点, 适合用仿真,里面集成的很多算法,比如多相机,多视图,粒子系统,各种回调函数,求交等都比较合适仿真,而且它只支持opengl, 扩展起来很方便,里面还集成了几种漫游器,如果要写自己的漫游器,也可以参考。如果初学者要学习图形学的话,推荐学习osg,网上也有很多的资料和教程,而且它有多线程的实现模型。
ogre用于游戏多些,而且支持d3d, 由于要同时实现opengl和d3d,所以相对OSG来说,它比较难以扩展,但是它的一些插件式的架构设计相当不错,如果想进入游戏行业,同时想学习了解引擎架构的话,推荐学习ogre,感觉ogre有点过度设计了,反而难以扩展,而且里面也没有集成好用的漫游器。它的粒子系统,场景管理都是插件式的,可以利用它来学习插件式的程序设计。
其他关于 vtk 与osg
在VTK之上开发的Paraview成为开源软件和很多公司的可视化工具。尤其在医疗三维可视化方面,基本上算是首选开发工具。采用VTK和Paraview为可视化开发工具比较出名的有OpenFOAM,Salome,StressCheck,Cubit等。
Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk
VTK以用户使用的方便性和灵活性为主要原则,具有如下的特点:
1) 具有强大的三维图形功能。Visualization Toolkit 既支持基于体素Voxel-basedrendering 的体绘制Volume Rendering又保留了传统的面绘制,从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件
2) Visualization Toolkit 的体系结构使其具有非常好的流streaming和高速缓存caching 的能力,在处理大量的数据时不必考虑内存资源的限制
3) Visualization Toolkit 能够更好的支持基于网络的工具比如Java 和VRML 随着Web 和Internet 技术的发展VisualizationToolkit 有着很好的发展前景
4) 能够支持多种着色如OpenGL 等
5) Visualization Toolkit 具有设备无关性使其代码具有良好的可移植性
6) Visualization Toolkit 中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为
7) Visualization Toolkit 具有更丰富的数据类型,支持对多种数据类型进行处理
8) 既可以工作于Windows 操作系统又可以工作于Unix 操作系统极大的方便了用户。
OpenCV是 Open Source Computer Vision Library
OpenGL是 Open Graphics Library
OpenCV主要是提供图像处理和视频处理的基础算法库,还涉及一些机器学习的算法。比如你想实现视频的降噪、运动物体的跟踪、目标(比如人脸)的识别这些都是CV的领域
OpenGL则专注在Graphics,3D绘图。
其实两者的区别就是Computer Vision和Computer Graphics这两个学科之间的区别,前者专注于从采集到的视觉图像中获取信息,是用机器来理解图像;后者是用机器绘制合适的视觉图像给人看。