【发布时间】:2020-04-21 19:48:21
【问题描述】:
我正在为 cs50 开发边缘程序。我在这个程序上遇到了很多问题,但我觉得我越来越接近了。如果有人可以帮助我解决可能出现的问题,我将不胜感激。
这是我的代码:
// Detect edges
void edges(int height, int width, RGBTRIPLE image[height][width])
{
RGBTRIPLE copy[height][width];
for (int h = 0; h < height; h++)
{
for (int w = 0; w < width; w++)
{
copy[h][w] = image[h][w];
}
}
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int gxred = 0;
int gxgreen = 0;
int gxblue = 0;
int gyred = 0;
int gygreen = 0;
int gyblue = 0;
for (int r = -1; r < 2; r++)
{
for (int s = -1; s < 2; s++)
{
if ((y + r < height && y + r >= 0) && (x + s < width && x + s >= 0))
{
if (r == -1 || r == 1)
{
gxred += copy[y + r][x + s].rgbtRed * s;
gxgreen += copy[y + r][x + s].rgbtGreen * s;
gxblue += copy[y + r][x + s].rgbtBlue * s;
}
if (r == 0)
{
gxred += copy[y + r][x + s].rgbtRed * (s * 2);
gxgreen += copy[y + r][x + s].rgbtGreen * (s * 2);
gxblue += copy[y + r][x + s].rgbtBlue * (s * 2);
}
}
if ((y + s < height && y + s >= 0) && (x + r < width && x + r >= 0))
{
if (s == -1 || s == 1)
{
gyred += copy[y + s][x + r].rgbtRed * s;
gygreen += copy[y + s][x + r].rgbtGreen * s;
gyblue += copy[y + s][x + r].rgbtBlue * s;
}
if (s == 0)
{
gyred += copy[y + s][x + r].rgbtRed * (s * 2);
gygreen += copy[y + s][x + r].rgbtGreen * (s * 2);
gyblue += copy[y + s][x + r].rgbtBlue * (s * 2);
}
}
}
}
int red = round(sqrt((gxred * gxred) + (gyred * gyred)));
int green = round(sqrt((gxgreen * gxgreen) + (gygreen * gygreen)));
int blue = round(sqrt((gxblue * gxblue) + (gyblue * gyblue)));
if (red > 255)
{
red = 255;
}
if (blue > 255)
{
blue = 255;
}
if (green > 255)
{
green = 255;
}
image[y][x].rgbtRed = red;
image[y][x].rgbtGreen = green;
image[y][x].rgbtBlue = blue;
}
}
return;
}
这是我的错误:
:( 边缘正确过滤中间像素 预期为“210 150 60\n”,而不是“199 150 60\n”
:( 边缘正确过滤边缘上的像素 预期为“213 228 255\n”,而不是“191 198 255\n”
:( 边缘正确过滤角落中的像素 预期为“76 117 255\n”,而不是“58 92 248\n”
:( 边缘正确过滤 3x3 图像 预期为“76 117 255\n21...”,而不是“58 92 248\n191...”
:( 边缘正确过滤 4x4 图像 预期为“76 117 255\n21...”,而不是“58 92 248\n191...”
【问题讨论】:
-
你能分享一下这段代码应该做什么吗?检测边缘?