Hallo. Ich möchte mir mit OpenCV mehrere Webcams anzeigen lassen. Wenn ich das so mache, wie hier in dem einen Tutorial gut erklärt, funktioniert das auch wunderbar. Wenn ich das ganze allerdings nicht mit dem QTimer, sondern mit einem QThread umsetzen will, funktioniert es nicht. Ich bastel da jetzt schon seit einigen Tagen dran herum und komme nicht weiter. Vielleicht hat ja noch jemand eine Idee von euch. Hier mal der Quelltext meiner run-Methode:
Mal wieder ein 'funktioniert nicht'. Das ist keine Fehlerbeschreibung!
Ich würde sagen Du greifst von einem Thread != Hauptthread auf die GUI zu was nicht zulässig ist.
this->ipImage = cvQueryFrame(this->capture); // Frame auslesen
if (this->ipImage) //hier ist der Fehler, weil this->ipImage irgendwie immer NULL bleibt
this->pixmap = QPixmap::fromImage(mirrorImage(convertImage(this->ipImage)));
Warum dort ein NULL-Pointer zurückkommt - keine Ahnung das ist imo kein Qt-Problem. Da sollte man mal bei openCV nachfragen ob das nicht geht wenn es in einem QThread läuft oder so. Gibts ggf. irgendwelche Fehlerabfragen zum überprüfen ob alles korrekt läuft?
this->pixmapItem = new QGraphicsPixmapItem(this->pixmap);
this->addItem(this->pixmapItem);
Das verstehe ich nicht - was macht die Funktion 'addItem'?
Wie gesagt - man kann aus einem QThread heraus nicht direkt auf die GUI zugreifen und dort etwas zeichnen. Man kann nur im Hauptthread zeichnen.
Ah jetzt habe ich es verstanden =) und wieder was gelernt.
Ich bastel das jetzt mal um. Leider habe ich nirgends was finden können, warum ich da einen NULL-Pointer zurückbekomme. Es läuft komischerweise nur im Thread nicht.
So ich habe bei meinem Quelltext jetzt mal alles auskommentiert und in in eine Zip gepackt und hier angehängt. Vielleicht ist es dann einfacher verständlich, was ich gemacht habe. Bin schon am verzweifeln.