Hi,
ich habe ein Programm geschrieben in dem der Videostream einer IP Cam ausgewertet wird.
Dort Funktioniert alles wie es soll. In dem Programm wird durch Timer aller 25ms ein Frame von der IPCam genommen und in ein Label des ui geschrieben.
Dann werden in dem Timer noch andere Sachen wie Objektdetektierung und region of interrest abfragen erledigt usw....
Nun gibt es dort eine art maskierung, die ich bis jetzt über OPENCV
Code: Alles auswählen
imshow("Fenster",bildmatrix)
In diesem Fenster erzeuge ich Trackbars mittels OPENCV
Code: Alles auswählen
createTrackbar( "Fadername", "Fenster", &Werte,maximalwert);
Dieses Konfigurationsfenster erscheint nur auf Tasten druck.
nun möchtew ich das OpencvFenster weglassen und durch einen Dialog von QT ersetzen, da ich dort die Fader besser anordnen kann und noch ein paar andere Sachen in dem Dialog mit erledigen möchte.
Der Dialog existiert bereits. ein Label ist drin und die Fader auch.
mein Problem ist nun, die Bilddaten von meinem Hauptprogramm in das Label des Dialoges zu bekommen.
Nun nutze ich zwar QT, bin aber in sachen Signals und Slots noch nicht so bewandert, hab mich bius jetzt mehr um C++ und Opencv gekümmert...
Wenn mir jemand helfen könnte wie ichs anstellen muss wäre ich sehr dankbar.
hier auszüge aus meinem code (der ganze wird zu lang und unübersichtlich)
hauptprogramm:
ebl_fk.h
Code: Alles auswählen
#ifndef EBL_FK_H
#define EBL_FK_H
/**********************************************************************/
//Includes QT
#include <QMainWindow>
#include <QWindow>
#include <QSlider>
#include <QtMultimedia/QSound>
#include <QtCore>
#include <QMessageBox>
#include <QVariant>
#include <QSettings>
#include <QDebug>
#include <QDialog>
#include <QApplication>
#include <QTextEdit>
#include <QKeyEvent>
#include <QMainWindow>
#include <QDesktopWidget>
#include <QWidget>
#include <QRect>
#include <QSize>
/* .....
*/
namespace Ui {class EBL_FK;}
using namespace std;
using namespace cv;
/* .....
*/
//erstellen class EBL_FK
class EBL_FK : public QMainWindow
{
Q_OBJECT
public slots:
//deklaration Funktion bildverarbeitungUndUpdateLabels
void bildverarbeitungUndUpdateLabels();
void bildgroesse();
void einstellungAufruf();
public:
myconfig* mconfig;
/* .....
*/
private:
Ui::EBL_FK *ui;
//test qimage für dialog
QImage test_mat;
/* .....
*/
Code: Alles auswählen
#include "ebl_fk.h"
#include "ui_ebl_fk.h"
#include "myconfig.h"
#include "qdebug.h"
/*...*/
//construktor
EBL_FK::EBL_FK(QWidget *parent) : QMainWindow(parent), ui(new Ui::EBL_FK)
{
ui->setupUi(this);
kameraverbinden();
//Timer zur Wiederhohlung und Aktualiesung der Bilddaten
// timer bereitstellen
qtimer = new QTimer(this);
// verbinde Timer mit bildverarbeitungUndUpdateLabels
connect(qtimer, SIGNAL(timeout()), this, SLOT(bildverarbeitungUndUpdateLabels()));
//dauer der wiederholung in ms
qtimer->start(25);
//Zeige OPENCV Fenster für einstellungen
connect(ui->actionKonfiguration,SIGNAL (triggered()), this, SLOT(einstellungAufruf()));
/*...*/
void EBL_FK::bildverarbeitungUndUpdateLabels()
{
/*...*/
// Wandlung von OpenCV Mat to Qt QImage und ausgabe Livebild
//Qimage "live" erzeugen
QImage live;
// Matrix frame in QImage wandeln
live = matToQImage(frame);
//ausgabe von live in label live
i->label_live->setPixmap(QPixmap::fromImage(live));
//ACHTUNG
//HIER nun versuch der übergabe an Dialog .....
//Dieses Qimage soll dann im label_mask im Dialog myconfig gezeigt werden
test_mat = matToQImage(frame);
//So in diese Richtung würde meine Idee gehen, nur nach Slot komm ich nicht mehr weiter:
// connect(this, SIGNAL bildverarbeitungUndUpdateLabels(test_mat), mconfig, SLOT myconfig::ui->label_mask;)
/*...*/
}
/*...*/
void EBL_FK::on_actionConfigdialog_triggered()
{
// mconfig= new myconfig(this);
// mconfig-> show();
}
void EBL_FK::keyPressEvent(QKeyEvent *e)
{
if(e->text() == "d")
{
//anzeigen von dialog auf tastendruck
mconfig= new myconfig(this);
//hier war noch ein anderer versuch
//connect(this,SIGNAL(bildverarbeitungUndUpdateLabels(test_mat)),
// mconfig::ui->label_mask,SLOT(setPixmap(QPixmap::fromImage(test_mat)));
//ui->label_live->setPixmap(QPixmap::fromImage(live))
mconfig-> show();
konfiguration=!konfiguration;
}
}
myconfig.h
Code: Alles auswählen
#ifndef MYCONFIG_H
#define MYCONFIG_H
#include <QDialog>
namespace Ui {
class myconfig;
}
class myconfig : public QDialog
{
Q_OBJECT
public:
explicit myconfig(QWidget *parent = 0);
Ui::myconfig *ui;
QImage lblmask;
~myconfig();
private:
};
#endif // MYCONFIG_H
Code: Alles auswählen
#ifndef MYCONFIG_H
#define MYCONFIG_H
#include <QDialog>
namespace Ui {
class myconfig;
}
class myconfig : public QDialog
{
Q_OBJECT
public:
explicit myconfig(QWidget *parent = 0);
Ui::myconfig *ui;
QImage lblmask;
~myconfig();
private:
};
#endif // MYCONFIG_H
kann mir jemand sagen, wie ich weiterkomme?, Danke