HTML

Az élet kódjai

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

Friss topikok

  • sdani: Sajnos nekem is hasonló érzéseim vannak az R kiszorulásával kapcsolatban. Remélem jobban fogja tar... (2024.04.29. 10:48) R meetup
  • sdani: Nagyon jók ezek a bejegyzések! Feszültséggel teli, fordulatos, mint egy jobb krimi. :D Abba ne hag... (2024.04.29. 10:35) Wgel CTF
  • sdani: @Travis.CG: Egy kis szerencse sosem árt. :D (2024.03.01. 13:19) A bioinformatika helyzete 2024-ben
  • Travis.CG: Szóval az akadémiai szféra mazochistává tett, amit a Pinephone-al élek ki? Hmm, érdekes összefüggé... (2023.10.05. 18:23) Új barátom az Informatikai titkárságról
  • Travis.CG: Túl nagy a hype körülötte, ezért túlzó elvárások vannak vele szembe. Ha a korábbi chatbotokhoz kép... (2023.02.28. 06:28) chatGPT, a bioinformatikus

QT + OpenCV

2017.07.24. 00:05 Travis.CG

Az OpenCV remek képelemző API, de a képeket meg is kell jeleníteni, sőt az sem nagy elvárás, hogy interaktívan változtassuk az elemzés során alkalmazott paramétereket. Szükség van tehát egy grafikus könyvtárra, ami biztosítja számunkra az elemeket. A highgui.h fejléc állomány biztosít számunkra egy igen limitált kereszt platformos elemgyűjteményt, de ha komoly alkalmazásokat akarunk fejleszteni, akkor sokkal több grafikai elemre lesz szükségünk.

Itt jön képbe a QT, ami egy remek kereszt platformos GUI keretrendszer. Jó lenne a kettőt együtt használni.

Alapvetően, ha mindkét könyvtárat linkeljük alkalmazásunkhoz, már használhatjuk is őket. Például készítünk egy ablakot, menükkel, majd a kép megjelenítésnél átváltunk a highgui-ra és azt használjuk. A módszer működik, nagyon ronda és kényelmetlen. Jobb lenne a két API-t közelebb hozni egymáshoz.

Alapvetően két olyan terület van, ahol adatokat kell átadni egyik könyvtárból a másikba. Az egyik a szöveges adatok, másik a képi információk.

Sztringek

Mint minden valamire való C++ könyvtárnak, úgy a QT-nek is és az OpenCV-nek is saját sztring osztálya van és egyik sem kompatibilis a másikkal. A QT QString osztályából könnyen csinálhatunk cv::string-et a következő módon:

void load(QString filename){
   Mat raw = imread(filename.toStdString());
}

Képek

Az OpenCV alapvetően a cv::Mat osztályt használja a képek tárolására. QT esetén több, különböző osztály tárolhat képet, attól függően, mi a célunk. Ha rajzolni akarunk, a QGraphicsScene osztályt használhatjuk. Ez csupán egy felület, ahová rajzolhatunk. Ha meg is akarjuk jeleníteni, szükségünk van egy felhasználói felületre is. Ez a QGraphicsView. Az OpenCV viszont csak bitképekkel dolgozik, ehhez az adatstruktúrához a QImage áll legközelebb.

Tehát ha az alkalmazásunk meg akarja jeleníteni a képeket, a következőt kell tennünk: Az OpenCV Mat osztályából a byte adatot át kell másolnunk egy QImage-be, amit elhelyezünk egy QGraphicsScene-ben, amit megjelenítünk a QGraphicsView-val. Lássuk az implementációt!

Size s = raw.size();
QImage qtimage(raw.data, s.width, s.height, QImage::Format_ARGB32);

Az adat formátuma a legkényesebb lépés. Ha rosszul választjuk meg, jó esetben hibás színeket kapunk, rossz esetben lefagy az alkalmazás. Sajnos nem minden OpenCV képformátumhoz találunk QT megfelelőt. A legkevesebb probléma a szürke árnyalatos képeknél van, azokat QImage::Format_Grayscale8 opcióval használhatjuk.

Van még egy rossz hírem. QImage nem adható QGraphicsScene-hez. Szükség van egy közvetítő osztályra a QPixmap személyében:

QGraphicsScene scene;
scene.addPixmap(QPixmap::fromImage(qtimage));

Végezetül jöhet a megjelenítés:

ui->graphicsView->setScene(&scene);
ui->graphicsView->show();

A neten található más megoldások byte-onként másolják az adatot, ami jó megoldás lehet, ha nem támogatott képformátumot használunk. Ellenkező esetben a fenti megoldás gyorsabb eredményt ad.

Szólj hozzá!

Címkék: programozás opencv

A bejegyzés trackback címe:

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

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.

Nincsenek hozzászólások.
süti beállítások módosítása