schön das es ein deutschsprachiges Qt Forum gibt und ich freue mich daran teilhaben zu dürfen =) Ich beschäftige mich jetzt seit einer Woche mit Qt und möchte gerne zur Übung eine Webcamausgabe mittels Qt realisieren. Dazu greife ich mit OpenCV auf meine Webcam zu und übergebe das OpenCV IplImage an das QImage. Schließlich soll das QImage auf einem QLabel ausgegeben werden.
Die Übergabe des IplImage an das QImage funktioniert soweit. Woran es bei mir hapert ist die Ausgabe des QImage auf dem QLabel. Irgendetwas funktioniert nicht so wie ich es gerne hätte.
Mein Code dazu sieht so aus:
// main.cpp
Code: Alles auswählen
#include "kamera.h"
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Kamera w;
w.show();
Kamera *test = new Kamera();
test->showWebcam();
return a.exec();
}
Code: Alles auswählen
#ifndef KAMERA_H
#define KAMERA_H
#include <QtGui/QMainWindow>
#include "ui_kamera.h"
#include "cv.h"
#include "highgui.h"
class Kamera : public QMainWindow
{
Q_OBJECT
public:
Kamera(QWidget *parent = 0, Qt::WFlags flags = 0);
~Kamera();
private:
Ui::KameraClass ui;
public slots:
void showWebcam();
};
#endif // KAMERA_H
Code: Alles auswählen
#include "kamera.h"
Kamera::Kamera(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
connect(ui.actionStart, SIGNAL(triggered()), this, SLOT(showWebcam()));
}
Kamera::~Kamera()
{
}
void Kamera::showWebcam()
{
IplImage *image;
CvCapture *capture = cvCaptureFromCAM(0);
int esc = 0;
while(true)
{
image = cvQueryFrame(capture);
cvCvtColor(image, image,CV_BGR2RGB);
QImage qimg((const uchar *)image->imageData, image->width, image->height, QImage::Format_RGB888);
ui.label->setPixmap(QPixmap::fromImage(qimg));
esc= cvWaitKey(10);
if (esc== 27) break;
}
cvReleaseCapture(&capture);
}
Wenn ich das Programm übersetze erscheint keine Ausgabe durch das QLabel. Das QImage ist aber komplett bzw. einwandfrei. Scheint also irgendetwas mit der Funktion setPixmap nicht zu klappen. Wäre furchtbar nett wenn sich dazu mal jemand äußern könnte.
Gruß, Saul