Nejnovější:
- Sailfish OS and memory
- Hillshade tile server
- Statistics of OSM Scout for Sailfish OS
- Nebezpečný router
- Tree model with Silica components
Podle data:
- listopad 2021
- leden 2019
- prosinec 2017
- prosinec 2016
- květen 2014
- duben 2014
- listopad 2013
- duben 2013
- duben 2011
- únor 2011
- leden 2011
- srpen 2010
- květen 2010
- březen 2010
- leden 2010
- říjen 2009
- duben 2009
- únor 2009
- říjen 2008
- září 2008
- srpen 2008
- duben 2008
- březen 2008
- únor 2008
Téma:
Softwarové vyvážení bílé v libv4l
Z kamery již dostávám použitelný obraz. Pořád je ale co zlepšovat. Při zkoumání oficiálního ovladače pro Windows jsem zjitil že tento driver dělá hodně věcí softwarově, jak je u levných web kamer běžné. V linuxu ale není moc možností jak obraz z v4l zařízení softwarově upravovat a tento upravený obraz v reálném čase posílat aplikaci. První vlaštovkou je upravená v4l knihovna od Hanse de Goede o které jsem psal v souvisloti s převodem video formátu pro Skype.
Libv4l se nabízí k implementaci mnohem více funkcí než „jen“ převod do jiného formátu. Např. rotace obrazu již byly impementovány. I když teda rotace v barevném prostoru yuv420 zatím nefungují tak jak by měli…
Nejvíce mi u m5602 chybělo vyvážení bílé barvy. Bez něj z této kamery teče za různých světelných podmínek rozličně zbarvený obraz. Tak jsem jsem si řekl že jej zkusím napsat sám. Zprvu jsem si na implementaci netroufl. Se zpracováním obrazu jsem neměl žádné zkušenosti. Ztrávil jsem tedy asi půl dne googlením a procházením zdrojáků různých knihoven v naději že najdu jednoduchý a jasný algoritmus implementující vyvážení bílé.
Nakonec jsem hledání vzdal a řekl jsem si že na tom nemůže být nic zas tak těžkého. Vždyť „vyvážený“ obraz by měl splňovat jednu jednoduchou podmínku. Poměr různých složek spektra (r:g:b) by měl být 1:1:1. Takže by mělo stačit zjistit průměrné hodnoty barev a pak tu které je tam málo trochu zesílit a ostatní ubrat… S touto úvahou jsem se vrhnul do nitra libv4l aniž bych tušil jak to dopadne. Nakonec mi mnohem větší problém než implementace samotného algoritmu dělalo pochopení bayer formátu. Konečný výsledek mě mile překvapil.
Ovládání obrazu přes sdílenou paměť
Další drobností, která používání kamery na linuxu značně znepříjemňuje je fakt, že žádná aplikace (já žádnou nenašel) neumožňuje ovládat všechny dostupné parametry. Takže vývojáři ovladačů hackují ovládání různých parametrů přímo na hardwaru, jako zrcadlení obrazu, kontrast, vyvážení barevných kanálů… aby nakonec v aplikaci v uživatelském protoru šel upravovat třeba jenom jas.
Z toho důvodu jsem se pustil do implementace ovládání kamery přes sdílenou paměť. Moje idea byla následující: Ve Skypu si pustím video s použitím libv4l a v konzoli ovládacím prográmkem budu moci měnit parametry obrazu. Protože v4l zařízení může být otevřeno pouze jedním programem (pokud je mi známo), tak ovládací program bude komunikovat s knihovnou přes dílenou paměť, nikoliv přímo se zařízením.
Výsledek můžete vidět na screencastu (x264 avi,
2.6MB).