基于opengl的任意图像变换
我需要通过将输入图像中的每个像素映射到输出图像上的某个位置来传输图像 例如,输入图像上的点(xi,yi)应该映射到点(xo,yo)。为了在输出图像上找到点的位置,我有一个查找表 在C/C++中很容易做到这一点,但速度非常慢。有没有任何方法,我可以做到这一点,使用OpenGL着色器,使之门的速度增加GPU的目标系统 如果我不能使用opengl,如何加快这个过程 编辑1 模拟示例c/c++代码:基于opengl的任意图像变换,opengl,image-processing,Opengl,Image Processing,我需要通过将输入图像中的每个像素映射到输出图像上的某个位置来传输图像 例如,输入图像上的点(xi,yi)应该映射到点(xo,yo)。为了在输出图像上找到点的位置,我有一个查找表 在C/C++中很容易做到这一点,但速度非常慢。有没有任何方法,我可以做到这一点,使用OpenGL着色器,使之门的速度增加GPU的目标系统 如果我不能使用opengl,如何加快这个过程 编辑1 模拟示例c/c++代码: class Point { int x; int y; } Point LUT[w,h
class Point
{
int x;
int y;
}
Point LUT[w,h]; // would hold LUT
void Transform(image in,image out)
{
for(int x=0;x<w;x++)
{
for(int y=0;y<h;y++)
{
color pixelColor=in.GetPixelColor(x,y);
out.PutPixelColor(LUT[x,y].x,LUT[x,y].y),pixelColor);
}
}
}
void main()
{
image in,out;
ReadLUT(LUT); // read LUT from file and fill LUT table
ReadImage(in); // read input image.
Transform(in,out); // transform image based on LUT
SaveImage(out); // write output image
类点
{
int x;
int-y;
}
点LUT[w,h];//我会拿着LUT
无效变换(图像输入、图像输出)
{
对于(int x=0;xPost您的C/C++代码。这是一项完全可并行化的任务。这基本上是GPU可以比CPU做得更好的事情。使用OpenGL可以做的事情如下:用图像的尺寸绘制一个四边形。在像素着色器中,确定源像素并将其设置为输出。@JacobParker:请参阅更新question@NicoScHettLe:你能给我一些样本代码或一些参考资料,我可以多读一些关于如何做这件事吗?你在表格中使用了什么样的模式?你可能有很差的缓存性能。你真的在C++中这样做了吗?发现它是慢的还是你猜的?GPU不一定会像IMA那样更快地使这样的事情发生。ge大小、查找表的外观等。特别是在考虑往返成本后(如果您希望将其保留在GPU上,则减少)