为了使用 GPU,硬件是否需要图形编程框架(OpenGL/OpenCV)支持?我在哪里可以找到这样的 API?
OpenCL 和 OpenGL 都由 GPU 驱动程序转换为硬件指令,因此您的操作系统需要一个支持这些框架的驱动程序。大多数 GPU 驱动程序支持某些版本的 OpenGL,因此应该可以工作。
OpenGL 标准由Khronos Group维护,您可以在nehe找到一些教程。
OpenGL 的工作原理
OpenGL 接受三角形作为输入,并根据发出绘制时的状态绘制它们。大多数 OpenGL 函数都可以通过操纵此状态来更改执行的操作。图像操作可以通过将输入图像加载为纹理并在纹理处于活动状态时绘制多个顶点来完成,从而生成新图像(或更通用的新二维数据网格)。
从版本 > 2(或使用正确的 ARB 扩展)开始,可以使用称为顶点和片段着色器的 GLSL 程序控制对图像执行的操作(有更多的着色器,但这些是最旧的)。每个顶点将调用一次顶点着色器,其结果被插值并转发到片段着色器。每次将新的片段(像素)写入结果时,都会调用片段着色器。
现在这都是关于读取和写入图像的,如何将其用于对象检测?使用 Vertices 将输入纹理跨越整个视口。除了计算 rgb 颜色并将它们存储在结果中,您可以编写一个计算灰度图像/渐变图像的片段着色器,然后检查每个像素的这些纹理,如果像素位于具有特定大小的循环的中心,是线条的一部分或者与周围环境相比具有相对较高的梯度(良好的功能),或者您可以找到一个很好的并行算法。(我自己没做过)
最终结果必须读回 CPU(有时您可以在执行此操作之前使用着色器来缩小数据)。OpenCL 给它一种不太像图形的感觉,并提供了更多的自由,但支持较少。