我需要通过将输入图像中的每个像素映射到输出图像上的某个位置来传输图像。
例如,输入图像上的点(xi,yi)应映射到点(xo,yo)。为了在输出图像上找到点的位置,我有一个查找表。
在C / C ++中很容易做到,但速度很慢。有没有什么方法可以使用OpenGL着色器来实现它,以便在目标系统上实现GPU的速度提升?
如果我不能使用opengl,我怎样才能加快这个过程?
模拟样本c / c ++代码:
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
}