▲ 2 r/cs50
Help with blur (pset4 - more comfortable)
>!I understand my code is quite messy and could probably be improved with multiple loops, though I am not sure how I would do that. My code is the following and is giving extremely small numbers for all the averages and rgb values though I feel as though it should be copying them into a variable and taking the correct values, please a hint!!<
>!void blur(int height, int width, RGBTRIPLE image[height][width])
{
RGBTRIPLE original_image[height][width];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
original_image[i][j].rgbtRed = image[i][j].rgbtRed;
original_image[i][j].rgbtGreen = image[i][j].rgbtGreen;
original_image[i][j].rgbtBlue = image[i][j].rgbtBlue;
}
}
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
RGBTRIPLE averages[9];
averages[0].rgbtRed = original_image[i][j].rgbtRed;
averages[0].rgbtGreen = original_image[i][j].rgbtGreen;
averages[0].rgbtBlue = original_image[i][j].rgbtBlue;
int counter = 1;
if (j + 1 < width)
{
averages[counter].rgbtRed = original_image[i][j + 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i][j + 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i][j + 1].rgbtBlue;
counter++;
}
if (j - 1 >= 0)
{
averages[counter].rgbtRed = original_image[i][j - 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i][j - 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i][j - 1].rgbtBlue;
counter++;
}
if (i + 1 < height)
{
averages[counter].rgbtRed = original_image[i + 1][j].rgbtRed;
averages[counter].rgbtGreen = original_image[i + 1][j].rgbtGreen;
averages[counter].rgbtBlue = original_image[i + 1][j].rgbtBlue;
counter++;
if (j + 1 < width)
{
averages[counter].rgbtRed = original_image[i + 1][j + 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i + 1][j + 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i + 1][j + 1].rgbtBlue;
counter++;
}
if (j - 1 >= 0)
{
averages[counter].rgbtRed = original_image[i + 1][j - 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i + 1][j - 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i + 1][j - 1].rgbtBlue;
counter++;
}
}
if (i - 1 >= 0)
{
averages[counter].rgbtRed = original_image[i - 1][j].rgbtRed;
averages[counter].rgbtGreen = original_image[i - 1][j].rgbtGreen;
averages[counter].rgbtBlue = original_image[i - 1][j].rgbtBlue;
counter++;
if (j + 1 < width)
{
averages[counter].rgbtRed = original_image[i - 1][j + 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i - 1][j + 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i - 1][j + 1].rgbtBlue;
counter++;
}
if (j - 1 >= 0)
{
averages[counter].rgbtRed = original_image[i - 1][j - 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i - 1][j - 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i - 1][j - 1].rgbtBlue;
counter++;
}
}
RGBTRIPLE average;
average.rgbtRed = 0;
average.rgbtGreen = 0;
average.rgbtBlue = 0;
for (int l = 0; l < counter; l++)
{
average.rgbtRed += averages[l].rgbtRed;
average.rgbtGreen += averages[l].rgbtGreen;
average.rgbtBlue += averages[l].rgbtBlue;
}
image[i][j].rgbtRed = average.rgbtRed / counter;
image[i][j].rgbtGreen = average.rgbtGreen / counter;
image[i][j].rgbtBlue = average.rgbtBlue / counter;
}
}
return;
}!<
u/FigureTraditional769 — 1 day ago