CS50x作业Filter-More中Edges函数代码异常求助
CS50x Filter-More 任务 Edges 函数输出异常求助
我编写了CS50x Problem Set 4中Filter-More任务的Edges函数代码,按自己的理解逻辑是正确的,但实际输出结果有误,希望能得到帮助。
Edges函数代码
void edges(int height, int width, RGBTRIPLE image[height][width]) { int Gx[3][3] = { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; int Gy[3][3] = { { -1, -2, -1 }, { 0, 0, 0 }, { 1, 2, 1 } }; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int sumGx[3] = { 0, 0, 0 }; int sumGy[3] = { 0, 0, 0 }; for (int dy = -1; dy <= 1; dy++) { for (int dx = -1; dx <= 1; dx++) { int ky = y + dy; int kx = x + dx; if ((ky > 0 && ky < height) && (kx > 0 && kx < width)) { sumGx[0] += Gx[dy + 1][dx + 1] * image[ky][kx].rgbtRed; sumGx[1] += Gx[dy + 1][dx + 1] * image[ky][kx].rgbtGreen; sumGx[2] += Gx[dy + 1][dx + 1] * image[ky][kx].rgbtBlue; sumGy[0] += Gy[dy + 1][dx + 1] * image[ky][kx].rgbtRed; sumGy[1] += Gy[dy + 1][dx + 1] * image[ky][kx].rgbtGreen; sumGy[2] += Gy[dy + 1][dx + 1] * image[ky][kx].rgbtBlue; } } } int pixel_value[3] = { 0, 0, 0 }; for (int i = 0; i < 3; i++) { if ((sumGx[i] != 0) && (sumGy[i] != 0)) { int squaredGx = sumGx[i] * sumGx[i]; int squaredGy = sumGy[i] * sumGy[i]; int edge = round(sqrt(squaredGx + squaredGy)); pixel_value[i] = edge > 255 ? 255 : edge; } } image[y][x].rgbtRed = pixel_value[0]; image[y][x].rgbtGreen = pixel_value[1]; image[y][x].rgbtBlue = pixel_value[2]; } } }
RGBTRIPLE结构体定义
typedef struct { BYTE rgbtBlue; BYTE rgbtGreen; BYTE rgbtRed; } __attribute__((__packed__)) RGBTRIPLE;
内容的提问来源于stack exchange,提问作者Zafar
相关产品推荐
相关产品推荐

