Я застрял на решении cs50 box-blur, которое является частью задачи filter (less) pset4. Когда я запускаю свою программу, ничего не выполняется ...
Инструкции следующие: Размытие
Есть несколько способов создать эффект размытия или смягчения изображения. Для этой проблемы мы будем использовать «размытие рамки», которое работает, беря каждый пиксель и для каждого значения цвета присваивая ему новое значение путем усреднения значений цвета соседних пикселей.
(Пример) Новое значение каждого пикселя будет средним из значений всех пикселей, которые находятся в пределах 1 строки и столбца исходного пикселя (образуя прямоугольник 3x3). Например, каждое из значений цвета для пикселя 6 может быть получено путем усреднения исходных значений цвета пикселей 1, 2, 3, 5, 6, 7, 9, 10 и 11 (обратите внимание, что сам пиксель 6 включен в в среднем). Аналогичным образом, значения цвета для пикселя 11 могут быть получены путем усреднения значений цвета пикселей 6, 7, 8, 10, 11, 12, 14, 15 и 16.
Для пикселя по краю или углу, например пикселя 15, мы все равно будем искать все пиксели в пределах 1 строки и столбца: в этом случае пиксели 10, 11, 12, 14, 15 и 16.
Мой код:
// Blur image
void blur(int height, int width, RGBTRIPLE image[height][width])
{
RGBTRIPLE temp[height][width];
int red = 0;
int blue = 0;
int green = 0;
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
int count = 0;
int rowCoords[] = { row-1, row, row+1 };
int colCoords[] = { col-1, col, col+1 };
//3x3 square around pixel
for (int r = 0; r < 3; r++)
{
for (int c = 0; c < 3; c++)
{
int curR = rowCoords[r];
int curC = colCoords[c];
//check adjacents inside image
if (curR >= 0 && curR < height)
{
if (curC >= 0 && curC < width)
{
//total of all surrounding pixels
RGBTRIPLE pixel = image[curR][curC];
red = red + pixel.rgbtRed;
green = green + pixel.rgbtGreen;
blue = blue + pixel.rgbtBlue;
count++;
}
}
}
//average
temp[row][col].rgbtRed = round(red / count);
temp[row][col].rgbtGreen = round(green / count);
temp[row][col].rgbtBlue = round(blue / count);
}
}
}
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
//copy to original
image[i][j] = temp[i][j];
}
}
return;
}
for loops
. Особенно 3-й и 4-й цикл for. Может быть, вы можете добавить еще немного комментариев к коду. И попытайтесь уточнить, что вы имеете в виду, говоря, что ничего не выполняется. Вы получаете ошибку? Вы запускаете тестовый файл? - person Enis Arik   schedule 01.09.2020check50
тест на эту проблему? Это должно гарантировать, что он будет запущен с правильными аргументами и вызовет вашу функцию. - person cyanic   schedule 02.09.2020