"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

wxWidgets mit OpenCV

Paxi 13.07.2011 - 18:45 2386 1
Posts

Paxi

Overclocking Team Member
Avatar
Registered: Oct 2009
Location: Wien
Posts: 389
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;
}

Nur dummerweise funktioniert das nicht so. Ich bekomme erstmal Memory Leaks laut VS (die bei gesonderten Start beider Programme einzeln nicht auftreten) und es passiert einfach nichts weiter.
Habe bereits diverese Testausgaben gemacht und nichtmal ein cout im Konstruktor von CV wird mir angezeigt.

Im allerschlimmsten Fall würden die Programme getrennt laufen lassen, dass würde aber wieder Probleme mit sich bringen und war nicht so gedacht, ergo wird es unseren Prof nicht wirklich zufriedenstellen.

Hat vl irgendjemand eine Idee wie man das Problem lösen kann bzw woran es liegen könnte?

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz