Я пытаюсь написать свой собственный код для размытия среднего фильтра.
У меня есть класс с именем FilterBlur, который содержит оператор << который будет применять фильтр к изображению, переданному в качестве аргумента. В моем коде нет ошибок, но фильтр не применяется должным образом
В моем коде «изображение» — это объект класса с именем Image с функциями-членами setVector, который устанавливает триплет rgb в пикселе x, y и getVector, который дает цвет rgb пикселя x, y.
«Математика :: Vec3<‘float’> «это шаблонный класс, чьи объекты содержат триплет значений, в данном случае это цвет rgb. Также N, N — размеры ядра.
Image operator<<(const Image& image) {
*image2 = image;
int w = (int)image2->getWidth();
int h = (int)image2->getHeight();for (int y = 0; y <h; y++)
{
for (int x = 0; x < w; x++)
{
math::Vec3<float> sum(0);
for (int fx = -N/2; fx <= N / 2; fx++){
for (int fy = -N / 2; fy <= N / 2; fy++)
{
int tx = x + fx;
int ty = y + fy;
sum += image2->getVector(tx, ty);
}
}
sum = sum / N / N;
image2->setVector(x, y,sum);
}
}
return *image2;
}
Может ли кто-нибудь помочь мне найти, что не так в моей реализации размытия?
Я считаю, что проблема должна быть в приведенном выше коде, поскольку класс Image, Vec3 и т. Д. Работают нормально, когда я использую их в реализации других фильтров, но я проверю их еще раз, если в приведенном выше коде нет проблем.
Я также загружаю изображение с проблемным размытым изображением.
Любая помощь будет оценена!
Задача ещё не решена.
Других решений пока нет …