gpt4 book ai didi

c++ - cuda将.png转换为灰度

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:15 27 4
gpt4 key购买 nike

我正在用 c 编写应用程序,它可以将 .png 图像转换为灰度图像。我正在使用 c 和 cuda。我有 cuda 代码的问题,我不知道为什么。 (我是 cuda 初学者)。

我的转换函数如下:

__global__
void setPixelToGrayscale(unsigned char *image)
{
int i = threadIdx.x*4;
float gray;
float r, g, b;
r = image[i + 0];
g = image[i + 1];
b = image[i + 2];
gray = .299f*r + .587f*g + .114f*b;
image[i + 0] = gray;
image[i + 1] = gray;
image[i + 2] = gray;
image[i + 3] = 255;
}


void transformToGrayCuda(rgb_image *img)
{

unsigned char* image = img->image;
unsigned char* image_d;
unsigned width = img->width;
unsigned height = img->height;
int N = (int)width * (int)height;
size_t size = N * sizeof(unsigned char);
cudaMalloc((void **) image_d, size);
cudaMemcpy(image_d, image, size, cudaMemcpyHostToDevice);
setPixelToGrayscale<<<1, N>>>(image_d);
cudaMemcpy(image, image_d, size, cudaMemcpyDeviceToHost);
cudaFree(image_d);

/* this works fine if cuda code is commented
int j=0;
for(j=0; j<N; j++)
{
int i = j*4;
float gray;
float r, g, b;
r = image[i + 0];
g = image[i + 1];
b = image[i + 2];
gray = .299f*r + .587f*g + .114f*b;
image[i + 0] = gray;
image[i + 1] = gray;
image[i + 2] = gray;
image[i + 3] = 255;
}
*/

}

我在 cuda 版本中做错了,因为当 cuda 代码被注释并且在循环 c 代码中运行时,一切正常。为什么我的 cuda 代码不能正常工作?

编辑:这是我的测试图像:http://i.imgur.com/HdRn7x3.png

这是我使用 cuda 的结果:http://i.imgur.com/Ima4ma1.png

这是我的结果,只有 c 代码:http://[这里没有空格,我没有代表] i.imgur.com/lU4vIiK.png

这就是我写的我的 cuda 代码无法正常工作时的意思。

最佳答案

您的代码中的问题是:

cudaMalloc((void **) image_d, size);

您应该给指针一个指针,而不是将其转换为变量。正确的代码是:

cudaMalloc(&image_d, size);

关于c++ - cuda将.png转换为灰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447649/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com