本文由@星沉阁冰不语出品,转载请注明作者和出处。
文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/50688378
微博:http://weibo.com/xingchenbing
千辛万苦,最终还是在一位前辈的帮助下把环境给配置好了。对于Qt中opencv环境的配置,记录以下几点:
1.opencv一定要是自己用CMake编译的mingw版本!就因为老是编译不成功,导致费了一周也没配置好。换系统、换不同版本的opencv,重装Qt根本没用。
2.qt程序运行的时候要把opencv的相应*.dll文件拷贝到对应的Debug文件夹中去,即和*.pro、*.cpp等放在一起。
还有就是如果不懂不要一味的只是百度、Google,找个有经验的前辈指点一二有时可以省去几天的功夫。
配置好之后就开始编程吧。最简单的就是打开并显示一张图片了。
在文件夹中打开一张图片用到的是下面来这两行程序:
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image File(*.png *.jpg *.jpeg *.bmp)"));
image = cv::imread(fileName.toLatin1().data());
显示图片时,如果用imshow当然简单,但是如果要用Qt界面来显示的话就得有一番计较了。
首先得把opencv的Mat格式图片转换成Qt的QImage格式。由于opencv的图片格式红绿蓝三通单的顺序是BGR,还要先把BGR转换成RGB。
显示的时候可以用QLabel也可以用Graphics View。两种方式显示图片的方式见最终程序。程序如下:
openImage.pro文件
#-------------------------------------------------
#
# Project created by QtCreator 2016-02-17T18:59:03
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = openImage
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
INCLUDEPATH += C:/Users/bingbuyu/Desktop/opencv2.4.8/include \
C:/Users/bingbuyu/Desktop/opencv2.4.8/include/opencv \
C:/Users/bingbuyu/Desktop/opencv2.4.8/include/opencv2
LIBS += -LC:/Users/bingbuyu/Desktop/opencv2.4.8/x64/mingw/lib -lopencv_core248.dll \
-lopencv_highgui248.dll -lopencv_imgproc248.dll -lopencv_features2d248.dll \
-lopencv_calib3d248.dll
mainwindow.h如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace cv;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
Mat image;
};
#endif // MAINWINDOW_H
mainwindow.cpp如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image File(*.png *.jpg *.jpeg *.bmp)"));
image = cv::imread(fileName.toLatin1().data());
cv::cvtColor(image,image,CV_BGR2RGB);
QImage img = QImage((const unsigned char*)(image.data),image.cols,image.rows,QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));
ui->label->resize(ui->label->pixmap()->size());
ui->graphicsView->hide();
//cv::namedWindow("Original Image");
//cv::imshow("Original Image",image);
}
void MainWindow::on_pushButton_2_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image File(*.png *.jpg *.jpeg *.bmp)"));
image = cv::imread(fileName.toLatin1().data());
cv::cvtColor(image,image,CV_BGR2RGB);
QImage img = QImage((const unsigned char*)(image.data),image.cols,image.rows,QImage::Format_RGB888);
ui->graphicsView->resize(img.width(), img.height());
QGraphicsScene *scene = new QGraphicsScene;
//scene->setSceneRect(0,0,img.width(),img.height());
scene->addPixmap(QPixmap::fromImage(img));
ui->graphicsView->setScene(scene);
ui->graphicsView->adjustSize();
ui->label->hide();
ui->graphicsView->show();
}
运行。程序异常终止。把用到的opencv的dll文件拷贝到Debug文件夹下,结果如下:
第二第三张分别为QLabel和Graphics View方式显示的图片。
最近开通了微信公众号,感兴趣的同学可以扫码在微信上交流。