#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <QWidget>
using namespace std;
using namespace cv;
class myWidget : public QWidget
{
Q_OBJECT
public:
myWidget(const IplImage *img, QWidget *parent = 0);
~myWidget();
protected:
void paintEvent(QPaintEvent *e);
private:
IplImage* iplImg;
QImage *qImg;
};
#endif // MYWIDGET_H
#include "myWidget.h"
#include <QtGui\QPainter>
#include <QtCore\QPoint>
myWidget::myWidget(const IplImage *img, QWidget *parent /* = 0 */) : QWidget(parent)
{
// 创建QImage图像
qImg = new QImage(QSize(img->width, img->height), QImage::Format_RGB888);
// 创建QImage图像
iplImg = cvCreateImageHeader(cvSize(img->width, img->height), 8, 3);
// iplImg 和 Qimage 共享图像数据
iplImg->imageData = (char*)qImg->bits();
if (img->origin == IPL_ORIGIN_TL)
{
cvCopy(img, iplImg, 0);
}
else
{
cvFlip(img, iplImg, 0);
}
// 将颜色排列以QImage中的RGB顺序为标准
cvCvtColor(iplImg, iplImg, CV_BGR2RGB);
// 按图像实际大小调整窗体
this->resize(img->width, img->height);
}
myWidget::~myWidget()
{
cvReleaseImage(&iplImg);
delete qImg;
}
void myWidget::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.drawImage(QPoint(0, 0), *qImg);
}
#include "widget.h"
#include <QApplication>
#include "myWidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
IplImage *img = cvLoadImage("lena.jpg",1);
if (img)
{
myWidget *mw = new myWidget(img);
mw->show();
}
int re = app.exec();
cvReleaseImage(&img);
return re;
}