Skip to content

Instantly share code, notes, and snippets.

@Omi98
Last active July 15, 2020 09:28
Show Gist options
  • Save Omi98/06e743ddb0da73d5785a1517e683e973 to your computer and use it in GitHub Desktop.
Save Omi98/06e743ddb0da73d5785a1517e683e973 to your computer and use it in GitHub Desktop.
Blur filter
// Blur image
void blur(int height, int width, RGBTRIPLE image[height][width])
{
float avg1 = 0.00;
float avg2 = 0.00;
float avg3 = 0.00;
RGBTRIPLE temp[height][width];
for (int h = 0; h < height; h ++)
{
for (int w = 0; w < width; w ++)
{
temp[h][w] = image[h][w];
}
}
for (int h = 0; h < height; h ++)
{
for (int w = 0; w < width; w ++)
{
if ((h == 0) && (w == 0))
{
// code (1)
// left top corner
avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w + 1].rgbtRed) / 4.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w + 1].rgbtGreen) / 4.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w + 1].rgbtBlue) / 4.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h != 0) && (h != (height - 1)) && (w == 0))
{
// code (2)
// left edge
avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w + 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w + 1].rgbtRed) / 6.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w + 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w + 1].rgbtGreen) / 6.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w + 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w + 1].rgbtBlue) / 6.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h != 0) && (h == (height - 1)) && (w == 0))
{
// code (3)
// left bottom corner
avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w + 1].rgbtRed) / 4.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w + 1].rgbtGreen) / 4.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w + 1].rgbtBlue) / 4.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h == (height - 1)) && (w != 0) && (w != (width - 1)))
{
// code (4)
// bottom edge
avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h][w - 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w + 1].rgbtRed + temp[h - 1][w - 1].rgbtRed) / 6.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w + 1].rgbtGreen + temp[h - 1][w - 1].rgbtGreen) / 6.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w + 1].rgbtBlue + temp[h - 1][w - 1].rgbtBlue) / 6.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h == (height - 1)) && (w == (width - 1)))
{
// code (5)
// right bottom corner
avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w - 1].rgbtRed) / 4.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w - 1].rgbtGreen) / 4.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w - 1].rgbtBlue) / 4.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h != 0) && (h != (height - 1)) && (w == (width - 1)))
{
// code (6)
// right edge
avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w - 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w - 1].rgbtRed) / 6.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w - 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w - 1].rgbtGreen) / 6.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w - 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w - 1].rgbtBlue) / 6.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h == 0) && (w == (width - 1)))
{
// code (7)
// top right corner
avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w - 1].rgbtRed) / 4.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w - 1].rgbtGreen) / 4.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w - 1].rgbtBlue) / 4.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h == 0) && (w != 0) && (w != (width - 1)))
{
// code (8)
// top edge
avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h][w - 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w + 1].rgbtRed + temp[h + 1][w - 1].rgbtRed) / 6.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w + 1].rgbtGreen + temp[h + 1][w - 1].rgbtGreen) / 6.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w + 1].rgbtBlue + temp[h + 1][w - 1].rgbtBlue) / 6.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else if ((h != 0) && (h != (height - 1)) && (w != 0) && (w != (width - 1)))
{
// code (9)
// middle
avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h][w + 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w - 1].rgbtRed + temp[h - 1][w + 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w - 1].rgbtRed + temp[h + 1][w + 1].rgbtRed) / 9.00;
avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w - 1].rgbtGreen + temp[h - 1][w + 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w - 1].rgbtGreen + temp[h + 1][w + 1].rgbtGreen) / 9.00;
avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w - 1].rgbtBlue + temp[h - 1][w + 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w - 1].rgbtBlue + temp[h + 1][w + 1].rgbtBlue) / 9.00;
image[h][w].rgbtRed = round(avg1);
image[h][w].rgbtGreen = round(avg2);
image[h][w].rgbtBlue = round(avg3);
}
else
{
break;
}
}
}
// ./filter -b images/yard.bmp out.bmp
return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment