[Megoldva]2d ábrázolásban szeretnék segítséget kérni.

Sziasztok

Hatalmas képeken kellene (szemmel) optikai szempontból érdekes képrészleteket keresni, a következő módon.
Adott egy tömb, ami x, és y koordinátákban a kép koordinátáit adják meg. Ha valamely pontban az érték nagyobb, mint egy adott maximum a képpont fehér, ha kisebb mint a minimum, a képpont fekete. A kettő között lineáris szürkeskála, tehát pofonegyszerű metódus. Egy egy trackbarral állítom a minimum értékét minimum, és maximum között, és viszont. Azzal a megszorítással, hogy a minimum mindíg kisebb, mint a maximum. A baj az, hogy a kép nagyon sokszor 5k*5k nagyság fölött van, ami gyakorlatilag lehetetlenné teszi, az analitikus elemzést, nem tudom szűkíteni a látóteret, mert nem tudható, hogy hol bukkan fel az érdekes rész. Kénytelen vagyok a fenti állítgatást a teljes képen megtenni. De olyan szinten tetű lassú, még több szálon is a megjelenítés, hogy 10-20 másodperceket kell várnom két csúszkamozdítás között, ha a cpu számol. Tudom, hogy ez dilettáns megoldás, de (eddig, mivel nem vagyok profi programozó, hanem amolyan lelkes amatőr) nem foglalkoztam opengl-el (mert gondolom ez a megoldás). Gondoltam ám legyen csináljuk opengl-el. Meg is írtam a dolgot mert nem nagy só. 2 egymásba ágyazott ciklus, így hirtelenen elsőre megoldásnak tűnt
ez:

glBegin(GL_POINTS);
while (i
{
int j=0;
while (j
{
int tpcolor=memo[i][j][0];
glColor3f(tpcolor,tpcolor,tpcolor);
glVertex2f(i,j);
j++;
}
i++;
}

Igen ám, de ha simán i, és j-ket lépek, akkor nem 1-pixel 1 pont alapján lép, hanem valami számomra misztikus módon minden 10-dik 20-dik.... (egyenletesen persze) pixelbe berak egy pontot, és a kép csökevénye látszik. Biztosan az van, hogy valami beállítást, stb nem teszek meg. A lényeg az annyi lenne, hogy milyen alapbeállítások mellet tudok amolyan 1 pixel 1 pont képet sima 2d képet megjeleníteni opengl-el, esetleg fittelni képernyőméretre......

Lehet nem világos így elsőre minden. A kérdésfeltevésem azért is kusza, mert ez az egyik legkisebb (ámbátor piszokul bosszantó) gond a megvalósítással. A másik gondom az, hogy egy 5k*5k fölötti méretű kép, így sem sokkal gyorsabb (látványosn gyorsabb, de 3-4 órányi opengl tanulás után, ennyi ment). Biztosan nem így kell csinálni. Tudom, nagyon sok jó doksi van (le is töltöttem jópárat), amit szépen át fogok tanulmányozni, mert tetszik, és praktikus lehet a munkámhoz az opengl, de most gyors megoldást szeretnék találni, amiben bízom, hogy tudtok segíteni.

Mindent előre is köszönök.

Hozzászólások

naiv megoldasnak nem rossz. a pixel <-> koordinata mappolast a glOrtho paranccsal allitod. De ha kepet akarsz kezelni, akkor azt erdemes texturakkent (NeHe tutorialokban eleg hamar szobajonnek) az interpolaciot meg ha azt akarod, hogy gyors legyen, akkor erdemes a gpu-n. Keress ra, hogy "fragment shader".

---------------------------------------------------------------------------------------
Unix is simple. It just takes a genius to understand its simplicity. — Dennis Ritchie

kozben kiderult, hogy van ilyen http://en.wikipedia.org/wiki/OpenCV
ha jol ertelmezem kepfeldolgozas a celja. de ennel tobbet nem tudok rola

---------------------------------------------------------------------------------------
Unix is simple. It just takes a genius to understand its simplicity. — Dennis Ritchie

Első ötlet: csak a látható területre számold ki a transzformációt, ne pedig
az egész képre. A csúszkákkal állítsd, hogy mi a látható terület.

Második: nézd meg, hogy mi az a rész, ami lassú, és arra próbálj meg valamilyen
cache-t építeni. Tehát ha van olyan rész, amit előre ki tudsz számítani, akkor azt
a program indításakor tedd meg, és ezután csak használd.

A képet pedig nem pixel-esen rakd ki, hanem generáld bele egy textúrába, és ezt mutasd.