URL: https://www.overclockers.at/coding-stuff/wxwidgets-mit-opencv_225090/page_1 - zur Vollversion wechseln!
Die Wahrscheinlichkeit, dass mir noch jemand so kurzfristig helfen kann ist zwar wsh eher gering aber ich versuche mal mein Problem zu schildern.
Ich arbeite wie so immer mal wieder in letzter Sekunde und zwar geht es um das letzte Projekt, dass ich für die FH das Semester erledigen muss und die Präsentation ist morgen um 15:00 ^^
Kurze Hintergrundinfo:
Es geht bei dem Projekt darum Felder auszuwerten in die mit einem LaserPointer geleuchtet wird.
Anhand einer XML Config werden am Anfang die Slides definiert mit Inhalt.
Diese Sildes werden dann mit wxWidget erstellt und angezeigt. Nebenbei läuft OpenCV mit dem das Bild einer Kamera angesteuert wird. In diesen Slides (Folien vergleichbar mit PP etc..) befindet sich dann immer eine Frage und 1-4 Kästchen mit einer zugehörigen Antwort. Mittels OpenCV wird dann ausgelesen in welchem Kästchen mehr Leute hineinleuchten.
Wenn es jemand genauer interessiert kann ich es gerne noch morgen erleutern aber ich denke das ist erstmal genug Hintergrundinfo.
Nunja ich mach das mit einem Kollegen gemeinsam und wir haben eher selten zusammengearbeitet und haben jz Probleme mit der Integration.
Der Einstiegspunkt des Programms ist in der wxWidgets GUI definiert mittels des IMPLEMENT_APP(..) Makros.
Mein Kollege hat den Großteil des OpenCV Zeugs gemacht und sein Programm ist eine normale Konsolenanwendung mit int main() Methode.
Diese int main() Methode können wir jz natürlich nicht weiter verwenden, da wir bereits dein Einstiegspunkt mittels wxWidgets definiert haben.
Aus der int main() hab ich also einfach eine void run() gemacht. Die ich nach Start der wxApp aufrufe.
Code: PHP#include "OSQA_App.h" #include "OSQA_Frame.h" #include "CV.h" IMPLEMENT_APP(OSQA_App); bool OSQA_App::OnInit() { OSQA_Frame* frame = new OSQA_Frame(wxT("OSQA 0.9_Beta"), 800, 600); frame->Show(true); SetTopWindow(frame); CV *cv = new CV(); cv->run(); return true; }
Ein GUI-Programm reagiert generell in einer Hauptschleife auf Events wie z.B. Mausbewegungen und Tastatureingaben. Wenn da "parallel" dazu etwas anderes laufen soll, brauchst du entweder einen weiteren Thread oder du machst sowas wie einen Timer, der regelmäßig ein Event produziert, und wenn dein GUI das bekommt, verarbeitet es eine kleine Einheit des Hintergrundprozesses. Im letzteren Fall darf der Hintergrundprozess natürlich selbst keine Schleife mehr sein, sondern du musst eine Funktion aufrufen können, die in kurzer Zeit (ein paar ms) einen kleinen Teil der Arbeit erledigt und dann wieder zurückkehrt.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025