用Opencv在QT下写的第一个图像处理程序

第一步,下载Opencv

下载后放在目录下,比如放在C盘根目录下,里面有两个文件夹build与sources

用Opencv在QT下写的第一个图像处理程序_第1张图片

第二步,用Qtcreate创建widget工程,这里命名为opencvImageProcess,基类选QMainWindow。一路自动生成后,有如下工程模式,

用Opencv在QT下写的第一个图像处理程序_第2张图片

第三步,在QT生成的工程中以外部库方式导入opencv库,导入后,工程文件内容如下,

win32:CONFIG(release, debug|release): LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world453
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world453d
else:unix: LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world453
INCLUDEPATH += C:/opencv/build/x64/vc15
DEPENDPATH += C:/opencv/build/x64/vc15
INCLUDEPATH += c:\opencv\build\include

可根据自己实际opencv安装情况调整路径,目的是找到库文件(链接没有问题)与头文件(编译没有问题)

第四步,添加简单的图形处理测试程序代码。

要完成的功能如下,

用Opencv在QT下写的第一个图像处理程序_第3张图片

按翻转后,

用Opencv在QT下写的第一个图像处理程序_第4张图片

核心代码解析,

 1)打开图形文件,显示在Label中

void MainWindow::on_pushButton_open_clicked()
{
    //调用窗口打开文件
    QString filename = QFileDialog::getOpenFileName(this,
                                                    tr("open image"),
                                                    ".",
                                                    tr("Image file(*.png *.jpg *.bmp)"));
    image = imread(filename.toLocal8Bit().data());
    if(image.data) {
        ui->pushButton_flip->setEnabled(true);
    }
    //将Mat图像转换为QImage图像,才能显示在label上
    QImage img = QImage((const unsigned char*)(image.data),
                        image.cols, image.rows, QImage::Format_RGB888);//格式转换
    //设定图像大小自适应label窗口的大小
    img = img.scaled(ui->label->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    ui->label->setPixmap(QPixmap::fromImage(img));

}
 2)翻转图形,显示在Label中
void MainWindow::on_pushButton_flip_clicked()
{

    flip(image, image, 1);
    QImage img = QImage((const unsigned char*)(image.data),
                        image.cols, image.rows, QImage::Format_RGB888);
    img = img.scaled(ui->label->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);


    ui->label->clear();//清除窗口
    ui->label->setPixmap(QPixmap::fromImage(img));//显示其它图像

}

你可能感兴趣的:(QT,图像与图形处理,c++)