C++ 使用OpenGL修改图像?
我有一个设备来获取X光图像。由于一些技术限制,探测器由不同大小的像素和多个倾斜和部分重叠的瓷砖组成。图像因此失真。探测器的几何结构是精确已知的 我需要一个函数将这些扭曲的图像转换成均匀像素大小的平面图像。我已经通过CPU完成了这项工作,但我想尝试一下OpenGL,以一种可移植的方式使用GPU 我没有OpenGL编程的经验,我能在网上找到的大部分信息对于这种用途都是无用的。我应该如何进行?我该怎么做C++ 使用OpenGL修改图像?,c++,opengl,C++,Opengl,我有一个设备来获取X光图像。由于一些技术限制,探测器由不同大小的像素和多个倾斜和部分重叠的瓷砖组成。图像因此失真。探测器的几何结构是精确已知的 我需要一个函数将这些扭曲的图像转换成均匀像素大小的平面图像。我已经通过CPU完成了这项工作,但我想尝试一下OpenGL,以一种可移植的方式使用GPU 我没有OpenGL编程的经验,我能在网上找到的大部分信息对于这种用途都是无用的。我应该如何进行?我该怎么做 图像大小为560x860像素,我们需要处理720幅图像。我使用的是Ubuntu。而不是OpenGL
图像大小为560x860像素,我们需要处理720幅图像。我使用的是Ubuntu。而不是OpenGL,这听起来像是CUDA,或者更一般的GPGPU问题
如果你已经有C或C++代码来完成它,CUDA应该只需计算你想在GPU上使用的类型以及算法是如何被平铺的。您可能能够进行多次传递并使用着色器来获得所需的内容,但最好在OpenCL中重新编写算法。这样做的好处是,如果没有可用的图形加速卡,您甚至可以使用多核CPU。如果您想使用OpengGL实现这一点,通常可以将当前数据作为纹理提供,然后编写一个片段着色器来处理该数据,并将其设置为渲染纹理。输出纹理完全渲染后,可以将其检索回CPU并将其作为文件写入
我担心,如果你不知道自己在做什么,就很难做一个非常笼统的总体流程草图。但是如果(正如你所说)你已经用CUDA做了这件事,那么你显然已经对大部分细节有了相当清楚的了解。你在这里问的核心问题是“我如何使用GPU来解决这个问题?” 现代GPU本质上是线性代数引擎,因此您的第一步是将问题定义为一个矩阵,该矩阵将输入坐标
多年来一直在做这类事情(最初使用Direct3D着色器,但最近使用CUDA),我必须说,我完全同意这里推荐CUDA/OpenCL的帖子。它使生活简单得多,而且通常运行得更快。现在,我不得不不顾一切地回到非图形算法的图形API实现上。我已经在CUDA中编程,但正在寻找OpenGL应该能够提供的便携式解决方案。另一件事是Ubuntu对CUDA不友好。CUDA与Ubuntu完美配合。我在Ubuntu 9.04/9.10/10.04和NVIDIA的CUDA SDK上做了很多工作。当然,CUDA仅限于Nvidia硬件…是的。。。CUDA和OpenCL在Ubuntu上运行良好。OpenCL可能是更好的主意,它更具可移植性。如何安装与OpenCL兼容的驱动程序?我在生产电脑上有一个NVIDIA 8800GT,可以得到一个更强大的卡(即GTX285)。只需确保您拥有最新版本的视频驱动程序本身。OpenCL和CUDA安装在所有的库中,但它们使用标准的NVidia专有视频驱动程序。8800GT是一个非常强大的GPU,它的计算能力大约是你的CPU的15倍,即使它是四核。OpenGL比OpenCL更便携,尤其是在Ubuntu上。OpenCL与Ubuntu完美结合。我已经用Ubuntu 9.04-10.04和NVIDIA的OpenCLSDK做了很多工作。@danvil如何安装驱动程序?我“手动”安装了驱动程序,但每次更新内核时,我都会发现自己在VGA中,必须重新安装驱动程序。我是在我的工作电脑上做的,但这在生产机器上是不可接受的。必须重新编译驱动程序内核模块以匹配新的内核版本。对于其他一些模块,这已经自动完成。英伟达模块必须手动添加。(这是重新安装驱动程序的唯一必要步骤)。这就是我无法在生产PC上使用此功能的原因。每次安装时,用户都会看到VGA屏幕