CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Przetwarzanie obrazów - binaryzacja

Przetwarzanie obrazów - binaryzacja

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Re: Przetwarzanie obrazów - binaryzacja

Nowy postprzez polymorphism » wtorek, 19 kwietnia 2011, 10:49

W przypadku bitmap 8 bitowych struktury w ogóle nie są potrzebne. No bo po co? Każdy piksel to wartość 8 bitowa, która jest albo indeksem koloru, albo odcieniem szarości, zatem bitmapę taką można traktować jako tablicę unsigned char[].

Jeżeli operacje wykonywane są na szarej bitmapie lub monochromatycznej to być może lepiej sprawdziłaby się struktura GRAYCOLOR:

Pod warunkiem, że jest 16 bitowa. Choć tu też nie widzę sensu używania tej struktury, ponieważ nic mi nie daje. Wystarczy zwykła tablica WORD[].
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Przetwarzanie obrazów - binaryzacja

Nowy postprzez kwgrkwgr » wtorek, 19 kwietnia 2011, 13:10

Ten kawałek kodu pod Builder 6 działa a pod 2010 już nie (floating point overflow .... i coś podobnego )
Dokładnie w tym miejscu zakomentowanym, pewnie chodzi o te 4 bajty ale nie jestem pewien.
KOD cpp:     UKRYJ  
        for (i=0; i<ObrazKolorowy->Width; i++)
                for (j=0; j<ObrazKolorowy->Height; j++)
                {
                        color = ObrazKolorowy->Canvas->Pixels[i][j];
                        rvalue = GetRValue(color);
                        gvalue = GetGValue(color);
                        bvalue = GetBValue(color);
                        //zmien wartosc wedlug tablicy LUT
                        color = (TColor)(LUTr[rvalue] +                                // tu jest błąd wykonania
                                           ((int)LUTg[gvalue] << 8) +
                                           ((int)LUTb[bvalue] << 16));
                        //oblicz histogram
                        WynikKolorowy->Canvas->Pixels[i][j] = color;
                        r[GetRValue(color)]++;
                        g[GetGValue(color)]++;
                        b[GetBValue(color)]++;
                }


Czy zastąpienie tego miejsca linijką:
KOD cpp:     UKRYJ  
WynikKolorowy->Canvas->Pixels[i][j] = (TColor)RGB((int)LUTr[rvalue],(int)LUTg[gvalue],(int)LUTb[bvalue]);

Jest dobrym pomysłem?
Avatar użytkownika
kwgrkwgr
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): środa, 13 kwietnia 2011, 16:37
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP Win7
Kompilator: C++ Builder 6;
C++ Builder 2010;
MS Visual 2008 C#;
Gadu Gadu: 9692051
    Windows XPOpera

Re: Przetwarzanie obrazów - binaryzacja

Nowy postprzez polymorphism » wtorek, 19 kwietnia 2011, 13:50

pewnie chodzi o te 4 bajty ale nie jestem pewien.

Pewnie chodzi o typ float i jego przepełnienie, a nie o te 4 bajty z dyskusji. Czytaj treści komunikatów! A to, że kod różnie działa pod dwoma różnymi wersjami środowiska wynika z tego, że oba inaczej mają ustawione słowo kontrolne FPU. Można je przestawić tak, żeby nie zgłaszał wyjątkiem tego typu sytuacji. Choć oczywiście lepiej doprowadzić kod do takiego stanu, żeby działał bez dłubania w rejestrach kontrolnych FPU.

Czy zastąpienie tego miejsca linijką: (...) Jest dobrym pomysłem?

Jeśli działa, to tak.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Przetwarzanie obrazów - binaryzacja

Nowy postprzez Cyfrowy Baron » wtorek, 19 kwietnia 2011, 14:22

kwgrkwgr napisał(a):Czy zastąpienie tego miejsca linijką:


Tutaj wydaje mi się to jedynym sensownym wyjściem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości

cron