我是一名大一新生,目前正在学习C++编程。我擅长数学和物理,所以我希望用OpenGL专攻2D/3D图形。我的问题是关于OpenGL和OpenCV之间的区别,以及这些区域的重叠程度。根据我所读到的,一个创建图形,而另一个处理它们。我有很多关于3D图形和与之相关的数学的书籍。我想知道的是,我在OpenGL中学到的相同概念是否可以应用到OpenCV中。是否有可能成为一名C++软件工程师,专门研究OpenGL和OpenCV,还是一个不切实际的目标?
我问这些问题是因为我明白2D/3D图形编程需要大量的数学和物理知识,但我对OpenCV和“踏入大门”所需的必备技能不太了解。
发布于 2014-12-18 02:21:51
OpenGL是一个三维图形API。它提供了描述3D场景的API,并将其呈现给框架缓冲区,并最终显示在屏幕上。它的基元是顶点列表、三角形列表、法线向量列表等。2D是3D的特例;IIRC OpenGL没有显式的2D支持(即精灵和比特blit)
OpenCV是一种计算机视觉( CV ) API,实现了各种CV算法、blob检测、模板匹配等。
OpenCV通常对真实的图像数据进行操作,而不对OpenGL生成的图形进行操作。(除非一个人试图制造一个AI机器人,它只看到游戏的帧缓冲区输出,但却完全在另一个切线中。)
“是否有可能成为一名C++软件工程师,专门研究OpenGL和OpenCV,还是一个不切实际的目标?”
当然,它们是不同类型的系统,您可以专攻不止一件事情。至于OpenGL和3D图形,如果你学习了它们,你可能可以使用它们中的任何一个。
对于计算机视觉来说,学习一个系统肯定会对另一个系统有所帮助,但可能与计算机图形学的程度不同。
注:这个问题可能属于另一个董事会。
发布于 2014-12-18 02:01:02
我从未使用过OpenCV,但是AFAIK与OpenGL有很大的不同。OpenGL是围绕许多全局状态构建的一个C++ (因此它经常被称为状态机),而OpenCV则公开了一个更面向对象的C++接口,大量使用了模板。
OpenGL意在成为图形硬件的一个瘦抽象层,因此从某种意义上说,它也可以被看作是设备驱动程序。这个API的主要关注点是实时渲染,而不是通用计算.因此,OpenGL提供的工具主要集中在尽可能快和高效地将多边形绘制到屏幕上。
我不能在OpenGL和OpenCV之间做一个很好的对比,但我的理解是,CV更多地关注于离线图像处理,因此如果与GL相比,它是一个完全不同的概念。不过,我想,OpenGL经常与OpenCV一起使用来实现CV所做的图像处理的可视化,所以如果您关注CV,您可能会从了解像GL这样的图形API中获益。如果您的主要兴趣是实时图形,如游戏和CG电影,那么OpenGL就足够了。你不太可能需要了解这些领域的计算机视觉工具。
最后,你说得对,2D/3D图形编程需要数学和物理知识。如果你对数学感到舒服,生活就容易多了。如果你喜欢这个领域,首先学习数学,然后学习图形API,比如OpenGL,来实现这个理论。
https://softwareengineering.stackexchange.com/questions/266752
复制相似问题