Po prostu skonwertuj obraz do YUV format i obliczyć średnią kanału luma. Konwersja kolorów jest typową operacją, a każda przyzwoita struktura przetwarzania obrazu ją obsługuje. Na przykład OpenCV (powiedziałeś, że OpenGL, ale to naprawdę nie ma nic wspólnego z przetwarzaniem obrazu, zakładam, że chodziło Ci o OpenCV) ma CvtColor.
Jeśli nie masz takiej ramy poręczny, ale ma dostęp do intensywności pikseli, można użyć równania:
Y' = 0.299*R + 0.587*G + 0.144*B
dostać kanał Luma, a następnie obliczyć średnią. R, G i B reprezentują odpowiednio czerwony, zielony i niebieski kanał.
EDIT
Należy zauważyć, że możliwe jest, że aparat będzie zrekompensować jasnych/ciemnych scenach, modyfikując jego przysłony. Jest to zależne od kamery, ale myślę, że większość aparatów to robi - w przeciwnym razie twoje zdjęcia mogą być albo nasycone (czysto białe), albo zwykłe czarne - w obu przypadkach bezużyteczne. Ludzkie oczy faktycznie do the same thing.
Wadą jest to, że trudno jest stwierdzić, czy jesteś w ciemnym lub lekkim otoczeniu, patrząc tylko na obraz. W takim przypadku konieczne może być wyjście poza obraz i zapytanie do kamery. Teoretycznie możesz to zrobić bezpośrednio przez sterownik (mało prawdopodobne) lub patrząc na metadane obrazu (np. Z JPEG, jest tam EXIF).
Na koniec nie powiedziałeś, co dokładnie chcesz znać jasność. Jeśli jest to scena ogólna, średnia będzie wystarczająco dobra. Jeśli jest to część sceny, być może trzeba zrobić coś mądrzejszego. Daj nam znać, jeśli tak jest.
Dzięki, myślę, że to musi zadziałać. Spróbuję i opublikuję wynik tutaj. – krafter
Spójrz na mój zredagowany komentarz - zidentyfikowałem potencjalny problem i niektóre sposoby jego rozwiązania. – misha
Tak, to faktycznie działa: uzyskanie informacji o pikselach dzieląc go na intensywność kolorów, a następnie obliczanie Y, jak pokazano tutaj. Ponieważ potrzebuję średniej wartości jasności małych (szybkich) pulsowań światła, zanim kamera będzie mogła się do niej dostosować, ta metoda działa dobrze. Dzięki jeszcze raz. – krafter