【发布时间】:2021-07-19 03:32:54
【问题描述】:
我已经坚持了几个小时了 每件事都运行良好并输出应有的值,但不知何故出了点问题 我什至一步一步地按照程序计算了 3 x 3 网格的结果,我得到的结果与我从 excel 中的计算表中获取的图片中的程序输出相同,我不知道出了什么问题
// Detect edges
void edges(int height, int width, RGBTRIPLE image[height][width])
{
int b = 0, g = 0, r = 0,x = 0, y = 0, sumx[3], sumy[3],multi[3],sqr[3]; //arrays are in order of b g r
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 h = 0 ; h < height ; h++)
{
for (int w = 0; w < width; w++)
{
for (int i = 0 ; i < 3 ; i++) // to reset the sum array
{
sumx[i] = 0;
sumy[i] = 0;
}
y = 0;
for (int i = h-1 ; i <= h+1 ; i++)
{
x = 0;
for (int n = w-1 ; n <= w+1 ;n++)
{
if ( i >= 0 && i <= height && n >= 0 && n <= width)
{
b = image[i][n].rgbtBlue;
g = image[i][n].rgbtGreen;
r = image[i][n].rgbtRed;
sumx[0] += b*Gx[y][x];
sumx[1] += g*Gx[y][x];
sumx[2] += r*Gx[y][x];
sumy[0] += b*Gy[y][x];
sumy[1] += g*Gy[y][x];
sumy[2] += r*Gy[y][x];
}
++x;
}
++y;
}
multi[0] = pow(sumx[0],2)+pow(sumy[0],2);
sqr[0] = round(sqrt(multi[0]));
multi[1] = pow(sumx[1],2)+pow(sumy[1],2);
sqr[1] = round(sqrt(multi[1]));
multi[2] = pow(sumx[2],2)+pow(sumy[2],2);
sqr[2] = round(sqrt(multi[2]));
for (int i = 0 ; i < 3 ;i++) // to check if sqred is bigger than 255
{
if (sqr[i]>255)
{
sqr[i] = 255;
}
}
image[h][w].rgbtBlue = sqr[0];
image[h][w].rgbtGreen = sqr[1];
image[h][w].rgbtRed = sqr[2];
}
}
return;
}
【问题讨论】:
-
当您将图像中的数据提供给您的函数并在您最喜欢的调试器中逐步执行代码时会发生什么?