最近有了解一些机器学习方面的知识。先来聊聊OpenCV、OpenGL、OpenCL、DirectX这几个知识点。
OpenCV (Open Source Computer Vision Library)
OpenCV是一个跨平台的计算机视觉库(主要操作对象是图像)。它是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。此外还涉及一些机器学习的算法。比如你想实现视频的降噪、运动物体的跟踪、目标(比如人脸)的识别这些都是CV的领域。
而早期OpenCV的主要目标是
- 为推进机器视觉的研究,提供一套开源且优化的基础库。不重造轮子。
- 提供一个共同的基础库,使得开发人员的代码更容易阅读和转让,促进了知识的传播。
- 通过提供不需要开源或免费的软件许可,促进商业应用软件的开发。
- OpenCV现在也集成了对CUDA的支持
OpenGL(Open Graphics Library)
OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
也就是说程序员在开发游戏的时候,只要考虑什么时候、在哪个位置,加上什么样的烟雾,就可以了。而不必考虑究竟要怎样去编写代码,才能实现烟雾效果的问题。(下为流程图)
OpenCL(Open Computing Language)
OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。它是显卡作通用浮点运算的API。比如视频转码,原来这个工作都是CPU来做的。现在显卡运算能力比较强,这个工作完全可以交给显卡来做。那究竟怎样调用显卡就不需要再由程序员考虑了,因为已经有一个现成的接口,程序员只要管好转码的算法,然后直接调用OpenCL中现成的指令,这个工作就自动由CPU转交到GPU了。
DirectX(Direct eXtension)
DirectX是由微软公司创建的一系列专为多媒体以及游戏开发的应用程序接口。旗下包含Direct3D、Direct2D、DirectCompute等等多个不同用途的子部分,因为这一系列API皆以Direct字样开头,所以DirectX(只要把X字母替换为任何一个特定API的名字)就成为这一巨大的API系列的统称。目前最新版本为DirectX 12。它的特点是;
1)除视频外,多了音频等其他功能。
2)DirectX通用些,OpenGL专业些。
3)仅用于Microsoft Windows
4)DirectX是左手定则,OpenGL是右手定则
知识延伸:
(OpenGL使用右手坐标系,其中世界坐标系的+ Z部分向观察者延伸。DirectX使用左手系统,其中世界坐标的+ Z部分延伸到屏幕中,远离查看器。)
Dx是微软做的一个超大的多媒体处理合集,包括音频,视频,direct3D只是其中之一
Dx做的音视频的采集和显示部分,算法涉及不多
Dx做的事都是和硬件有关系的,都要依赖硬件的,由于ms的强大,现在硬件大都支持dx
Dx显示视频的时候没有通过gdi,是直接通过显卡实现的,非常的快。
接下来我们来看openCV 和 OpenGL 的对比,在搜索资料的时候,看到了一个比喻,“一个画家写生,看风景就需要OpenCV,素描就需要OpenGL。”
下面我们来看两者功能的功能
功能 |
opencv |
opengl |
对2D的支持 |
主要2D, |
主要3D,专注在Graphics,也支持2D |
对3D的支持 |
一定程度支持3D。传统的视觉计算中,深度图只能当做单通道的灰度图进行处理。想实现隔空的多点触摸是绰绰有余,但是如果想实现三维重建(比如 Kinect Fushion)那么我们必须将算法升级到三维空间。相应的,三维空间的算法也需要三维的 API 进行渲染,也就是 OpenGL |
很专业 |
主要函数 |
图像处理:降噪、运动物体跟踪、目标(比如人脸)识别、车道线识别 |
渲染 |
函数个数 |
500个左右? |
350个左右? |
操作系统 |
Windows,Linux |
Windows,Linux |
硬件 |
CPU,通过扩展也支持GPU |
GPU,也支持CPU |
同行软件 |
|
DirectX 3D |
输入类型 |
是图像处理库,一般针对真实图像,比如摄像头、照相机获取的视频图像,标准化的图形数据(如JPEG, PNG, BMP) |
更多的用于CAD、科学可视化程序,比如游戏,虚拟现实,输入点、线等 |
开发语言 |
基于C |
基于C |
开源 |
是 |
是 |
对点云的支持 |
一般结合PCL库或OpenGL |
支持 |
相互关系:
增强现实(AR)应用中,既可能用到OpenCV,也可能用到OpenGL
由于显卡的能力增强,现在的 OpenCV 已经有新的形态了,即大量的运算位于显卡上。
运算通过 CUDA(显卡厂商NVIDIA推出的运算平台) 或 OpenCL。
渲染仍然需要通过 OpenGL,而 OpenGL,DirectX都是2D/3D图形软件接口,更多的用于、游戏,虚拟现实(AR)等等。DirectX相对来说通用些,OpenGL相对来说专业些。
emmm,说了这么多,不知道大家有没有收获[/狗头],今天内容就到这里了,我们下篇再见。
原创文章,作者:CG世界,如若转载,请注明出处:https://www.cgworld.wiki/44246.html
评论列表(1条)
这是干货