Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Hledal jsem jak bych mohl realizovat funkci levels která se používá ve Photoshopu i Gimpu. Našel jsem tuto odpověď:
Color levels in OpenCV
od dhanushka:
For example, the orange curve is a straight line from (a, c) to (b, d), blue curve is a straight line from (a, d) to (b, c) and green curve is a non-linear function from (a,c) to (b, d).
We can define the blue curve as (x - a)/(y - d) = (a - b)/(d - c). Limiting values of a, b, c and d depend on the range supported by the channel that you are applying this transformation to. For gray scale this is [0, 255].
For example, if you want a transformation like (a, d) = (10, 200), (b, c) = (250, 50) for a gray scale image,
y = -150*(x-10)/240 + 200 for x [10, 250]
y = x for [0, 10) and (250, 255] if you want remaining values unchanged.
Čemu nerozumím je co znamenají hodnoty x a y a jak s nimi pracovat. Tohle je nějaká pseudodefinice nebo co a potřeboval bych kdo to chápete abyste mi to vysvětlili buď více slovně nebo rovnou kódem, nejlépe v c/c++ případně php nebo js. Já to chci dělat pro c++. Pro to používám knihovnu opencv, kde se dá snadno načíst obrázek i procházet obrazová data ve vektoru nebo poli.
Z gimpu vím, že vstupní hodnoty ovlivňují jas, u výstupích hodnot bych řekl že se mění kontrast. Ovšem nevím jak toto realizovat. Jednodušší by snad bylo převést obraz do jiného barvového prostoru jako luv nebo lab nebo hsv a tam upravovat přímo ten jas. Snad.
Za druhé, pokud jste machři byl bych vděčný za rozříšení formulace tak, aby byla schopna ovlivnit i třetí vstupní hodnotu gamma - zelenou křivku. A opět bych to potřeboval spíš v programátorském kódu než matematickém.
Offline