HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

OpenCV GUI Windows-on

2023.02.02. 19:11 Travis.CG

A feleségem pollencsomókat is vizsgál. Anélkül, hogy túlságosan elvesznénk a részletekben, a lényeg az, hogy fotókat készítenek egy nagy tál pollenről és azokat megszámolják, osztályozzák szín szerint.

Mikor megláttam, azonnal felajánlottam, hogy készítek nekik egy elemző programot. A prototípust Linuxon kezdtem el, mert én már csak ilyen vagyok. El is készült a prototípus, ami a lehetőségekhez képest elég jól megszámolja a polleneket. Azért mondom, hogy a lehetőségekhez képest, mert a program nem használ semmilyen mélytanulást, csupán színek alapján különböző maszkokat állít össze, végül pedig a FindContours segítségével körberajzolja a pollencsomónak titulált dolgokat (meg persze néhány műterméket).

A következő lépés az lett volna, hogy az elkészült programot odaadjam neki tesztelésre. Igen, de hogyan készítsek Windows-os programot GUI-val? C#-ban már alkottam dolgokat, ott nagyon könnyű a GUI elkészítése. C++-ban viszont elég kényelmetlen Win32 API-val meg a béna Resource Editorral. Hallottam, hogy van egy MFC is, de azt már 20 évvel ezelőtt sem bírtam megtanulni, nem valószínű, hogy most jön meg az ihlet. Az OpenCV HighGUI modulja meg olyan, mintha párbajhoz egy villát kapnánk.

Azért hagytam, hogy a Visual Studio mindegyik megoldással elém rakjon egy-egy projekt vázat. Néztem őket két percig, majd letöröltem valamennyit. Nem, erre még az asszony sem vesz rá.

Ha már ennyire szeretem a C#-ot, van-e arra OpenCV? Van. Számtalan port, wrapper, minden vacak van. Ez jó hír, már csak azt a megoldást kell kiválasztani, ami a legjobban tetszik nekem. A lustaság az Emgu modult választatta velem. Ez ugyanis a NuGet csomagkezelővel gond nélkül felmászik.

A kód portolása nem ment gond nélkül. Az Emgu ugyanis sok OpenCV-ben megszokott osztályt C#-os megfelelőkkel helyettesít. A függvényeket az Emgu.CV.Invoke-ban találjuk, de bizonyos függvények megtalálhatóak az Image osztály metódusai között is. Ez egy kis kavart jelent, amikor az ember a dokumentációt bújja. A megszokott típusok az Emgu.CV.Structure alatt vannak, de egy M előtaggal. Tehát a legtöbbet használt Mat típus az Emgu.CV.Structure.MCvMat lesz. A konstansok pedig az Emgu.CV.CvEnum alatt gyűlnek. A függvények paraméterezése is változhat a C++-os változathoz képest, amit valamennyire ellensúlyoz az IntelliSense.

Az Emgu igazi erőssége abban rejlik, hogy van saját ImageBox eleme, amit egy egér mozdulattal a formra pakolhatok és használhatom a C# összes további elemét, hogy GUI-t építsek. Az ImageBox ráadásul beépített menükkel érkezik, amivel nagyíthatjuk a képet, hisztogrammokat rajzolhatunk, de akár a képet is lecserélhetjük egyetlen kód beírása nélkül.

Az első fordítással megszenvedtem, mert a kód csak 64 bites architektúrát támogat, és amíg ezt nem állítjuk be a Platform target-et x64-re (Project -> Properties -> Build), addig futási időben kivételt fog dobni. Utána viszont elfelejthetjük a HighGUI összes limitációját.

1 komment

Címkék: programozás opencv

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr3818035966

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Sealka 2023.02.12. 11:43:04

Én azért a Qt-vel tennék egy próbát, egész jó UI FW.
süti beállítások módosítása