如何解决CS50 pset4 过滤器“边缘”
例如,当我通过边缘代码运行图像时:
我已经尝试调试我的代码,但我仍然无法弄清楚:
这里是日志:
预期输出:
76 117 255
213 228 255
192 190 255
114 102 255
210 150 60
103 108 255
114 117 255
200 197 255
210 190 255
实际输出:
237 190 202
218 178 158
255 255 190
255 244 198
255 255 196
255 255 255
211 218 193
255 255 255
255 255 180
代码:
typedef struct
{
int red;
int green;
int blue;
}
kernel;
void edges(int height,int width,RGBTRIPLE image[height][width])
{
RGBTRIPLE pixel[height + 2][width + 2];
int G_x[3][3] = {
{-1,1},{-2,2},{-1,1}
};
int G_y[3][3] = {
{-1,-2,-1},{0,0},{1,2,1}
};
kernel x,y,net;
for (int p = 0; p < height + 2; p++)
{
for (int q = 0; q < width + 2; q++)
{
if (p == 0 || p == height + 1 || q == 0 || q == width + 1)
{
pixel[p][q] = (RGBTRIPLE){.rgbtRed = 0,.rgbtGreen = 0,.rgbtBlue = 0};
}
else
{
pixel[p][q] = image[p][q];
}
}
}
for (int i = 1; i <= height; i++)
{
for (int j = 1; j <= width; j++)
{
x = (kernel){.red = 0,.blue = 0,.green = 0};
y = (kernel){.red = 0,.green = 0};
net = (kernel){.red = 0,.green = 0};
for (int m = -1; m < 2; m++)
{
for (int n = -1; n < 2; n++)
{
x.red += pixel[i + m][j + n].rgbtRed * G_x[1 + m][1 + n];
x.blue += pixel[i + m][j + n].rgbtBlue * G_x[1 + m][1 + n];
x.green += pixel[i + m][j + n].rgbtGreen * G_x[1 + m][1 + n];
y.red += pixel[i + m][j + n].rgbtRed * G_y[1 + m][1 + n];
y.blue += pixel[i + m][j + n].rgbtBlue * G_y[1 + m][1 + n];
y.green += pixel[i + m][j + n].rgbtGreen * G_y[1 + m][1 + n];
}
}
net = (kernel){
.red = round(sqrt(abs((x.red * x.red) + (y.red * y.red)))),.green = round(sqrt(abs((x.green * x.green) + (y.green * y.green)))),.blue =round(sqrt(abs((x.blue * x.blue) + (y.blue * y.blue)))),};
if (net.red > 255)
{
net.red = 255;
}
if (net.blue > 255)
{
net.blue = 255;
}
if (net.green > 255)
{
net.green = 255;
}
image[i - 1][j - 1].rgbtRed = net.red;
image[i - 1][j - 1].rgbtGreen = net.green;
image[i - 1][j - 1].rgbtBlue = net.blue;
}
}
return;
}
我从过去 5 小时开始尝试,但我不知道,我做错了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。