Witam, mam problem z programem filtru medianowego, minimalnego i maksymalnego. Ogolem jest to dosc nietypowy problem bo udalo mi sie napisac program i to nawet jak sam profesor stwierdzil "idealny informatycznie" ale nie chce mi z niego wystawic najwyzszej oceny (potrzebne mi to jest do stypendium)
. Otoz w programie tym uzylam skryptu ktory od razu przelicza piksele i wybiera dla nich w zaleznosci - najmniejsza- najwieksza badz srednia wartosc piksela. Profesor jednak chce aby bylo to wykonane za pomoca dwoch petli "for". Nie mam juz sily do tego, czy ktos moglby mi pomoc z tymi petlami? Ponizej moj program:
#include "CImg.h"
#include <iostream>
using namespace cimg_library;
using namespace std;
int main()
{
cout << "Podaj nazwe pliku z rozszerzeniem:" << endl;
char plik[255];
cin >> plik;
cout << "Podaj nr filtru:\n1 - minimalny, 2 - medianowy, 3 - maksymalny" << endl;
int filtr;
cin >> filtr;
typedef unsigned char uchar;
// obraz_wyjsciowy jest tworzony przy uzyciu konstruktora kopiujacego.
// Oznacza to, ze obraz_wyjsciowy bedzie mial‚ takie same parametry
// (wymiary, kolory, itd) jak obraz_wejsciowy.
CImg<uchar> obraz_wejsciowy(plik), obraz_wyjsciowy(obraz_wejsciowy, false);
// false powoduje, ze piksele dla obraz_wyjsciowy beda'niezalezne'
// 'maska' o podanych wymiarach
CImg<uchar> N(3, 3);
if(filtr == 1)
{
// Z CImg - petla 'po kolorach'
cimg_forC(obraz_wejsciowy, c)
// Z CImg - petla 'po masce'
cimg_for3x3(obraz_wejsciowy, x, y, 0, c, N, uchar)
// zapisanie wartosci minimalnej pikseli z maski do obraz_wyjsciowy
obraz_wyjsciowy(x, y, 0, c) = N.sort(true).at(0);
}
else
if(filtr == 2)
{
cimg_forC(obraz_wejsciowy, c)
cimg_for3x3(obraz_wejsciowy, x, y, 0, c, N, uchar)
// zapisanie wartosci srodkowej pikseli z maski do obraz_wyjsciowy
obraz_wyjsciowy(x, y, 0, c) = N.sort(true).at(4);
}
else
if(filtr == 3)
{
cimg_forC(obraz_wejsciowy, c)
cimg_for3x3(obraz_wejsciowy, x, y, 0, c, N, uchar)
// zapisanie wartosci maksymalnej pikseli z maski do obraz_wyjsciowy
obraz_wyjsciowy(x, y, 0, c) = N.sort(false).at(0);
}
else
{
cout << "\n\tBLEDNY WYBOR\n";
}
CImgDisplay dsp1(obraz_wejsciowy, "Przed"), dsp2(obraz_wyjsciowy, "Po");
while(!dsp1.is_closed() || !dsp2.is_closed())
{
}
return 0;
}