[Delphi] Pobranie wartości R G B z obrazka

0

Witam,

szukam sposobu na pobranie danych RGB z pewnego konkretnego obrazu (format bmp,jpg i tiff). Otóż jest to zdjęcie tablicy ColorChecker. Chodzi o to aby procedura przeskanowała obraz pixel po pixelu i pobrała dla każdego z nich wartości R G B. Oczywiście chodzi tylko o te 24 pola. Pobrane wartości będą wykorzystane do dalszych obliczeń.

Tak wygląda przykładowy obrazek wspomnianej tablicy kolorów :

http://www.babelcolor.com/main_level/ColorChecker.htm

Będę wdzięczny za każdą pomoc :)

</image>
0
type
  TRGB = packed record
    R, G, B, A : byte;
  end;

function Col2RGB(color : TColor) : TRGB;
begin
  Result.R := color AND $000000FF;
  Result.G := (color AND $0000FF00) SHR 8;
  Result.B := (color AND $00FF0000) SHR 16;
  Result.A := (color AND $FF000000) SHR 24;
end;

var RGBPiksela : TRGB;

RGBPiksela := Col2RGB(Bitmap.Pixel[x,y]);
0

Jeszcze jedno bo nie wiem czy do końca dobrze się wyraziłem: chodzi o pobranie wartości RGB tylko dla tych 24 kwadratów i zapisanie ich w 24 różnych rekordach/tablicach. Te wartości następnie będzie liczona wartość średnia lub mediana.

0
ergo napisał(a)
RGBPiksela := Col2RGB(Bitmap.Pixel[x,y]);

Wystarczy przecież odpowiednio zmieniać w pętli x i y aby trafić na każdy z 24 kwadratów.

0

Chodzi o to aby te kwadraty zostały wykryte automatycznie. Mam już napisaną procedurę i interface, który pobiera wartości RGB z ręcznie zaznaczonego pola na obrazku(rozmiar pola jest definiowany za pomocą myszki). Teraz chodzi o to, żeby zaimplementować dodatkowy mechanizm wykonujący tą czynność automatycznie. Widziałbym to tak, iż procedura przeskanuje obrazek z kwadratami, zaznaczy każdy z nich obwódką (ciut mniejszą od kwadratu, aby pobierane wartości RGB były w miarę ujednolicone) i pobierze wartości RGB pixeli z pola "obwódki".

Dlaczego automatycznie? Tablica ColorCHecker będzie fotografowana stąd na zdjęciu kwadraty mogą być za każdym razem trochę przesunięte.

Chodzi o to aby te kwadraty zostały wykryte automatycznie. Mam już napisaną procedurę i interface, który pobiera wartości RGB z ręcznie zaznaczonego pola na obrazku(rozmiar pola jest definiowany za pomocą myszki). Teraz chodzi o to, żeby zaimplementować dodatkowy mechanizm wykonujący tą czynność automatycznie. Widziałbym to tak, iż procedura przeskanuje obrazek z kwadratami, zaznaczy każdy z nich obwódką (ciut mniejszą od kwadratu, aby pobierane wartości RGB były w miarę ujednolicone) i pobierze wartości RGB pixeli z pola "obwódki".

Dlaczego automatycznie? Tablica ColorCHecker będzie fotografowana stąd na zdjęciu kwadraty mogą być za każdym razem trochę przesunięte.

Albo jeszcze jedna możliwość: "wycięcie" ze zdjęcia tylko części z kwadratami:

user image

a następnie np takie zaznaczenie pól:

user image

0

Wycięcie wszystkich kwadratów ze zdjęcia juz mam - bo wykorzystałem procedurę jaką miałem wcześniej do zaznaczania myszką pól na obrazku. Niestety dalej nie wiem za bardzo jak "ugryźć" sprawę automatycznego wyszukiwania kolorowych pól na wybranym fragmencie zdjęcia a następnie pobierania z nich wartości RGB. Pomóżcie proszę :)

0

Chciałbym odświeżyć temat bo niestety dalej nie mogę sobie poradzić z tym problemem :/

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