To Display Video Frame on QML
-
I am using opencv to display video frames from web cam on Qt gui. Now I have planed to display it on QML window(without Qt gui). I was trying to use qdeclarative view but I didn't succeed.
I am attaching the source code for displaying the video on label. In the code I used label (labelInputVideo) and push button to start the frames. Is it possible to display qimage directly on qml.
Thanks in advancemainwindow.h
@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QFileDialog>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <QTimer>
//#include <dialog.h>
#include<QLabel>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QImage qimg;private slots:
void on_pushButton_clicked();public slots:
virtual void Frame() ;private:
cv::Mat image; // the image variable Ui::MainWindow *ui; CvCapture *capture; // OpenCV Video Capture Variable IplImage *frame; // Variable to capture a frame of the input video cv::Mat source_image; // Variable pointing to the same input frame QTimer *imageTimer;
};
#endif // MAINWINDOW_H
@main.cpp
@
#include <QtGui/QApplication>
#include "mainwindow.h"int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
@mainwindow.cpp
@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <QDeclarativeView>
#include <QDeclarativeComponent>
#include <QDeclarativeItem>
#include<QGridLayout>
#include<QDesktopWidget>using namespace cv;
Mat cameraFrame;MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);const int imagePeriod = 1000/25; // ms imageTimer = new QTimer(this); imageTimer->setInterval(imagePeriod); connect(imageTimer, SIGNAL(timeout()), this, SLOT(Frame())); // Use the default camera capture = cvCaptureFromCAM( CV_CAP_ANY );//cvCreateCameraCapture(0);
}
MainWindow::~MainWindow()
{
delete ui;
cvReleaseImage(&frame);
cvReleaseCapture(&capture);
}void MainWindow::on_pushButton_clicked()
{
if( imageTimer->isActive() )
{
imageTimer->stop();
}
else
{
imageTimer->start();
}}
void MainWindow::Frame(){
// Capture a frame
frame = cvQueryFrame(capture);// Point to the same frame source_image = frame; // Resize Image cv::resize(source_image, source_image, cv::Size(1080,960) , 0, 0); // Change to RGB format cv::cvtColor(source_image,source_image,CV_BGR2RGB); // Convert to QImage QImage qimg = QImage((const unsigned char*) source_image.data, source_image.cols, source_image.rows, QImage::Format_RGB888); // convert to QImage ui->labelInputVideo->setPixmap(QPixmap::fromImage(qimg)); // Resize the label to fit the image ui->labelInputVideo->resize(ui->labelInputVideo->pixmap()->size());
}
@ -
So. Have you managed to do that? I am trying it too with no success. :(