我正在做一个项目,旨在控制一个双垫人形机器人。不幸的是,我们的硬件资源( RB110 board and its mini PCI graphic card)非常有限。我计划将图像处理任务从CPU移植到显卡处理器,但以前从未这样做过……我被建议使用OpenCV,但似乎不太可能,因为我们的显卡处理器(Volari Z9s)不受框架支持。然后我在Linux Journal上找到了an interesting post。作者曾使用OpenGL处理从v4l设备检索到的帧。
我对硬件API和OpenGL/OpenCV之间的关系感到有点困惑。为了使用GPU,硬件是否需要图形编程框架(OpenGL/OpenCV)的支持?我在哪里可以找到这样的API?
我在谷歌上搜索了很多关于我的硬件的信息,不幸的是,供应商(XGI Technology)似乎不知何故已经灭绝了……
发布于 2012-11-26 03:01:15
为了使用图形处理器,硬件是否需要图形编程框架(OpenGL/OpenCV)的支持?我在哪里可以找到这样的API?
OpenCL和OpenGL都被GPU驱动程序转换为硬件指令,因此您需要支持这些框架的操作系统的驱动程序。大多数图形处理器驱动程序都支持某些版本的OpenGL,因此应该可以正常工作。
OpenGL标准由Khronos Group维护,您可以在nehe上找到一些教程。
OpenGL如何工作
OpenGL接受三角形作为输入,并根据发出绘制时的状态绘制它们。大多数OpenGL函数都是用来更改通过操作此状态执行的操作的。图像处理可以通过将输入图像加载为纹理并在纹理处于活动状态时绘制多个顶点来完成,从而生成新的图像(或更通用的新2D数据栅格)。
从版本2(或使用正确的ARB扩展)开始,在图像上执行的操作可以由称为顶点和片段着色器的GLSL程序控制(着色器更多,但这些是最旧的)。顶点着色器将为每个顶点调用一次,其结果将被插值并转发到片段着色器。每次将新片段(像素)写入结果时,将调用片段着色器。
现在这一切都是关于读取和写入图像,如何将其用于对象检测?使用顶点将输入纹理跨越整个视口。与计算rgb颜色并将其存储在结果中不同,您可以编写一个碎片着色器,它计算灰度图像/渐变图像,然后检查每个像素的纹理,如果该像素处于特定大小的循环中心,或者只是与其周围相比具有相对较高的渐变(良好的特性)或真正的任何东西,你可以找到一个很好的并行算法。(我自己还没做过这个)
最终结果必须读回cpu (有时可以在执行此操作之前使用着色器缩小数据)。OpenCL给了它一种不太像图形的感觉,给了它更多的自由,但不太受支持。
发布于 2012-11-26 02:55:40
首先,您需要着色器支持(GLSL或asm)
通常的方法是用你的图像(纹理)渲染全屏四边形,并应用碎片着色器。它被称为Post-Processing,并且受到指令集和硬件的另一个限制。在基本的lvl上,它允许你以并行的方式对大数据集应用简单(单个函数),这将产生另一个数据集。但是分支(如果支持)是第一个性能敌人,因为图形处理器由耦合SIMD blocks组成
https://stackoverflow.com/questions/13553942
复制相似问题