我正在尝试将图像倾斜 90 度,目前我正在按照此处介绍的方法进行操作: http://www.scribd.com/doc/66589491/Image-Rotation-Using-CUDA
我当前的内核代码是这样的:
__global__ void kernCuda(float *Source,float * Destination, int width)
{
int x = blockIdx.x * blockDim.x + threadIdx.x;
int y = blockIdx.y * blockDim.y + threadIdx.y;
int i = abs(x*cosf(theta)-y*sinf(theta));
int j = abs(x*sinf(theta)+y*cosf(theta));
if(x<width && y<width){
Destination[j*width+i]=Source[y*width+x];
}
}
图像有些倾斜,但看起来不正确,最重要的是一些彩色像素现在变成了黑色 (0)。任何帮助将不胜感激
最佳答案
我假设 theta 是一个 float 。所以你混合了浮点和整数变量。我建议您使用适当的转换来使其工作并查找舍入问题。
其次,为了查看您的程序是否正常工作,您可以将 cosf(theta)
替换为 0,将 sinf(theta)
替换为 1。
我看到的第三个问题是您只获取一个 x,y 值,而不是使用 while 循环遍历它们。因此,如果您的图像尺寸大于您使用的内核,您将无法获得所有像素。
编辑:我只是简单地看了一眼报告。真的不是很好。如果您只想了解 CUDA,我建议您阅读名为“CUDA 实例”的书。
关于c - 在 CUDA 中倾斜图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884978/