c++ Operacja splotu

0

Hey !

Mam problem z wykonaniem zadania na zajęcia z programowania. Jestem świeżym studentem i ale w związku z moją małą wiedzą na ten temat jest ciężko. Mam wykonać operacje splotu na 24-bitowej bitmapie i zapisać obraz wynikowy na dysku. Mam wykorzystać maskę o wartościach:
0 -1 0
-1 5 -1
0 -1 0
Wczytuje plik:

unsigned char* odczytajDaneObrazu(ifstream&, unsigned int rozmiar, int kursor)
{
        ifs.seekg(kursor, ios::beg);
        unsigned char *obraz = new unsigned char(rozmiar);
        ifs.read(reinterpret_cast<char*>(obraz), rozmiar);
        return obraz;
}

Wiem, że po wczytaniu pliku muszę go podzielić na kolory. Obliczam liczbę zer biorąc pod uwagę rozmiar danych pliku wejściowego: rozmiar A = BfSize - BfoffBits

Obliczam rozmiar w pikselach: rozmiar B (bez zer)= biWidth - biHeight
Wyliczam ilość zer - (rozmiar A - rozmiar B)/biHeight co jest mniej więcej tutaj:

void odczytajRGB(unsgidned char *obraz, int **niebieski, int **zielony, int **czerwony, unsigned int rozmiar, int szerokosc, int wysokosc)
{
int zerowe_bajty = rozmiar / wysokosc - 3*szerokosc;
int k = 0;
    for (int i =0; i < wysokosc; i++)
         (for (int j = 0; j < szerokosc; j++)
         {
    niebieski [i][j]=obraz[k++];
    zielony [i][j]=obraz[k++];
    czerwony [i][j]=obraz[k++];
          }
    k+=zerowe_bajty;
}

w tym miejscu moja wiedza się urywa. Operacja splotu jest dla mnie na razie zagadką i mam nadzieje że ktoś mi wyjaśni i pomoże to wszystko skleić w jednolity program.

Pozdrawiam !

0

Dla każdej warstwy koloru, dla każdego piksela: [1<=y<=wysokosc-2][1<=x<=szerokosc-2]
Wyliczasz średnią ważoną ta 5-ka to dla piksela [y][x] natomiast te -1 dla pikseli [y-1][x], [y+1][x], [y][x-1]',[y][x+1]`

0

Czyli wiem już na co ta macierz, z tych wartości wychodzi ładne 1 więc teoretycznie nie powinno być problemów gdyż będzie to 255. Nie wiem do końca jak to wszystko zapisać, zrobiłem taką pętle dla przykładu dla koloru niebieskiego:

for(x = 0; x<biHeight; x++)
for(y = 0, y<biWidth; y++) //po tablicy Blue
//B[x][y]

i obliczanie map NoweBlue
for(i=0; i<3; i++)
for(j=0; j<3; j++)

poprawcie, doradzcie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0