您的位置:首页 > 编程语言 > Qt开发

VS2010+OpenCV2.4.4+Qt4.8.4 图形界面第一个演示程序

2013-04-03 20:32 573 查看
VS2010+OpenCV2.4.4+Qt4.8.4 图形界面第一个演示程序

1.工程建立NEW->PROJECT

FILE->NEW->PROJECT,选择Qt Project --> Qt Application,name is qtestqtopencv 点击finish完成工程的创建.

2.UI界面设计

工程创建好之后,一个后缀名为.ui的文件就是关于界面设计的。我们首先就要对它操作。

双击.ui,进入designer(设计师),首先创建两个按钮,拖拽两个Push Buttons到Form中去,修改其名称。

一个名字为OpenImage,一个为ProcessImage

3. qtestqtopencv .h 添加OpenCV的头文件与变量,和相应的槽函数。如下:

/*

test qt and opencv

*/

#ifndef TESTQTOPENCV_H

#define TESTQTOPENCV_H

#include <QtGui/QDialog>

#include <QFileDialog>

#include <QLabel>

#include <QPushButton>

#include <opencv/cv.h>

#include <opencv/highgui.h>

#include "ui_testqtopencv.h"

class testqtopencv : public QDialog

{

Q_OBJECT

public:

testqtopencv(QWidget *parent = 0, Qt::WFlags flags = 0);

~testqtopencv();

private:

Ui::testqtopencvClass ui;

cv::Mat image; // cv image;

private slots:

void on_OpenImage_clicked();

void on_ProcessImage_clicked();

};

#endif // TESTQTOPENCV_H

4. testqtopencv.cpp实现文件如下:

PS:与MFC中显示图片需要CvvImage类似,要想在Qt的Form中显示图片,图片的格式也必须为QImage,需要将cv::Mat的RGB通道顺序变换为RGBA,QImage的格式为Format_RGB32,调用cvtColor实现.(后经实验,对于webcam视频需要使用参数:BGR2RGB,Format_RGB888这组参数,格式的问题真是混乱!!!)(这段话是yang_xian521说的)

/////////////////////////////////////////////////////////////////////////////////////////

#include "testqtopencv.h"

testqtopencv::testqtopencv(QWidget *parent, Qt::WFlags flags)

: QDialog(parent, flags)

{

ui.setupUi(this);

connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(on_OpenImage_clicked()));

connect(ui.pushButton_2,SIGNAL(clicked()),this,SLOT(on_ProcessImage_clicked()));

}

testqtopencv::~testqtopencv()

{

}

void testqtopencv:: on_OpenImage_clicked()

{

ui.lineEdit->setText(tr("OpenImage"));

QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"),

".", tr("Image Files (*.png *.jpg *.jpeg *.bmp)"));

image = cv::imread(fileName.toAscii().data());

// 注释的部分是按键响应,并不显示在Form中

// cv::namedWindow("Original Image");

// cv::imshow("Original Image", image);

// image=cv::imread("D:/demo.jpg");

// cv::imshow("test",image);

cv::cvtColor(image, image, CV_RGB2RGBA);

QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB32);

QLabel *label = new QLabel(this);

label->move(200, 50);//图像在窗口中所处的位置;

label->setPixmap(QPixmap::fromImage(img));

label->resize(label->pixmap()->size());

label->show();

}

void testqtopencv:: on_ProcessImage_clicked()

{

ui.lineEdit->setText(tr("ProcessImage"));

cv::flip(image, image, 1);

// cv::namedWindow("Output Image");

// cv::imshow("Output Image", image);

//cv::cvtColor(image, image, CV_RGB2RGBA);

QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB32);

QLabel *label = new QLabel(this);

label->move(200, 50);

label->setPixmap(QPixmap::fromImage(img));

label->resize(label->pixmap()->size());

label->show();

//ui.lineEdit

}

5.RUN

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: