Forum » Programiranje » C# in slika iz kamere
C# in slika iz kamere
ql000 ::
Imam eno zanimivo situacijo. Ko definiram kamero, gre za industrijsko kamero od Firei-ja, definiram format slike 640x480. To naredimltakole:
Sliko iz kamere pobiram v konzoli z uporabo kazalca IntPtr, preko metode, ki se aktivira vsakič ko slika prileti v računalnik:
Slike nalagam v vektor FrameBuffer tipa byte, velikosti 640*480*3. In ravno ta trojka me moti. Če te trojke ni noter, ko preverjam kakšno sliko dobim samo tretjino velikosti slike. V čem je finta, če je pa velikost slike pri kameri jasno definirana 640x480, kar pomeni, da bi moral biti vektor, v katerega shranjujem sliko velik natančno toliko, ne pa faktor tri večji.
Kakšna ideja?
public void CameraSetup(FiCamera myCamera) { myCamera.PixelFormat = FiPixelFormat.Y_MONO; myCamera.Resolution = FiResolution.res_640x480; myCamera.FrameRate = FiFrameRate.fps_30; myCamera.InitStream(0,0); }
Sliko iz kamere pobiram v konzoli z uporabo kazalca IntPtr, preko metode, ki se aktivira vsakič ko slika prileti v računalnik:
public static void OnFrameArrived(IntPtr frameData) { Marshal.Copy(frameData, FrameBuffer, Counter*FrameSize, FrameSize); System.Console.WriteLine(" Counter = {0}", Counter); Counter = Counter + 1; // Iteracija Counterja! if (Counter == FrameNo) // XX framov poberem in zaključim { CAM1.CameraStop(Camera1); } }
Slike nalagam v vektor FrameBuffer tipa byte, velikosti 640*480*3. In ravno ta trojka me moti. Če te trojke ni noter, ko preverjam kakšno sliko dobim samo tretjino velikosti slike. V čem je finta, če je pa velikost slike pri kameri jasno definirana 640x480, kar pomeni, da bi moral biti vektor, v katerega shranjujem sliko velik natančno toliko, ne pa faktor tri večji.
Kakšna ideja?
BlueRunner ::
Slikovni element je sestavljen iz treh zlogov: vrednost rdeče komponente, vrednost zelene komponente in vrednost modre komponente. RGB triplet. Kar pomeni, da potrebuješ za svojo barvno sliko 640 stolpcev * 480 vrstic * 3 zloge.
RGB
RGB
Zgodovina sprememb…
- spremenilo: BlueRunner ()
ql000 ::
Potem, če prav razumem vsak pixel v vektorju zastopan z tremi byti: R1G1B1R2G2B2,... prav razmišljam?
BlueRunner ::
Po občutku bi rekel, da bodisi nekje nekaj delaš narobe, bodisi knjižnica, ki si jo dobil, ne deluje tako, kot piše, da bi morala. Še enkrat preberi dokumentacijo, ker glede na tvoj opis dobivaš za vsak piksel 24 bitov (3 zloge), kar ustreza RGB formatu, čeprav si v nekem drugem delu programa rekel, da želiš mono sliko (8 bitov - 1 zlog).
ql000 ::
Sumim krivca in sicer je to callback funkcija, ki se sproži, ko slika prileti v računalnik:
Se bom še malo poigral. Mimogrede, ima kdo kakšen link do kode za pretvarjanje slike z 24bitno globino v monokromatsko?
try { Camera1.CallbackFormat = FiPixelFormat.RGB_24; // Callback format --> ta mi nagaja Camera1.onFrameArrived += new FiCamera.OnFrameArrived(OnFrameArrived); } catch (System.NullReferenceException) { }
Se bom še malo poigral. Mimogrede, ima kdo kakšen link do kode za pretvarjanje slike z 24bitno globino v monokromatsko?
ql000 ::
Sem spremenil:
v
Potem sem priredil še velikosti vektorjev, in zadeva deluje.
Hvala, BlueRunner!
Camera1.CallbackFormat = FiPixelFormat.RGB_24;
v
Camera1.CallbackFormat = FiPixelFormat.Y_MONO;
Potem sem priredil še velikosti vektorjev, in zadeva deluje.
Hvala, BlueRunner!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | kako narediti program ki bere drugi programOddelek: Programiranje | 5717 (4030) | imagodei |
» | [C#] IndexOutOfRange ExceptionOddelek: Programiranje | 1293 (1138) | ql000 |
» | [C#] Sesutje aplikacijeOddelek: Programiranje | 1606 (1441) | Jean-Paul |
» | C++ programirane v Open GL oz. Direct xOddelek: Programiranje | 2963 (2234) | Vesoljc |
» | OpenGL problemOddelek: Programiranje | 2474 (2040) | Gundolf |