OpenCV4.11+QT5.13开发初体验

先了解对应的模块:
opencv_core:包含库的核心模块
opencv_imgproc:包含图像处理函数
opencv_highgui:提供了读写图像和视频的函数以及一些用户交互函数等等。

在开发过程中,一般需要包括以下这些头文件:

#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

最常用的使用方法:

using namespace cv;
//创建一个空图像
Mat image ;
//读取输入图像
image = imread("D:/Nonmetal_no_press.png",1);
// 定义窗口(可选)
namedWindow("Original Image");
// 显示图像
imshow("Original Image", image);
// 0 表示永远地等待按键,输出非0正数,即为等待的毫秒数
cv::waitKey(0); 
cv::imwrite("output.bmp", result); // 保存结果

QT结合OpenCV库实现案例:
1、读取一张图片,在现实画圆以及显示字符串。
2、实现两个按钮,对图片进行上下左右翻转。
界面布局如下:
在这里插入图片描述这里的按钮需要转到槽,最后代码编写如下:
在.pro文件中导入opencv库:

INCLUDEPATH += D:\OpenCV-MinGW-Build\include


LIBS += D:\OpenCV-MinGW-Build\x64\mingw\bin\libopencv_core411.dll
LIBS += D:\OpenCV-MinGW-Build\x64\mingw\bin\libopencv_highgui411.dll
LIBS += D:\OpenCV-MinGW-Build\x64\mingw\bin\libopencv_imgproc411.dll
LIBS += D:\OpenCV-MinGW-Build\x64\mingw\bin\libopencv_calib3d411.dll
LIBS += D:\OpenCV-MinGW-Build\x64\mingw\bin\libopencv_imgcodecs411.dll
LIBS += D:\OpenCV-MinGW-Build\x64\mingw\bin\libopencv_videoio411.dll

mainwindow.h中添加对应的变量和头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <Qdebug>
#include <QMainWindow>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv ;


namespace Ui {
class MainWindow;
}


class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();


private:
    Mat src,src1,img ;
    Ui::MainWindow *ui;
};


#endif // MAINWINDOW_H

mainwindow.cpp实现:

#include "mainwindow.h"
#include "ui_mainwindow.h"


#include <unistd.h>
#include <stdlib.h>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    src = cv::imread("D:/Nonmtal_no_press.png",1);
    //src1 = cv::imread("D:/battery2.png",1);
    qDebug() << "图像的长度:" << src.rows;
    qDebug() << "图像的宽度:" << src.cols;
    qDebug() << "图像的通道个数:" << src.channels();
    if(src.empty())
    {
        qDebug() << "读取图像出错了....";
    }
    //imshow("test src",src);
    //因为opencv加载的通道顺序为BGR,所以这里需要做转换
    cvtColor(src,img,COLOR_BGR2RGB);
    //设置label显示大小
    ui->label->setGeometry(QRect(0, 0, src.rows, src.cols));
    //在图上画圆
    circle(img,Point(115,110),65,0,3);
    //在图上指定区域显示字符串
    putText(img,"This Color is Light Blue.",Point(0,110+65+30),FONT_HERSHEY_PLAIN,2.0,255,2);
    //显示图片
    ui->label->setPixmap(QPixmap::fromImage(QImage(img.data,img.cols,img.rows,img.step,QImage::Format_RGB888)));
}


void MainWindow::on_pushButton_clicked()
{
    //水平翻转
    flip(img,img,1);
    ui->label->setPixmap(QPixmap::fromImage(QImage(img.data,img.cols,img.rows,img.step,QImage::Format_RGB888)));
}


void MainWindow::on_pushButton_2_clicked()
{
    //垂直翻转
    flip(img,img,0);
    ui->label->setPixmap(QPixmap::fromImage(QImage(img.data,img.cols,img.rows,img.step,QImage::Format_RGB888)));
}


MainWindow::~MainWindow()
{
    delete ui;
}

运行效果:
在这里插入图片描述
按一下左右翻转:
在这里插入图片描述
再按一下上下翻转:
在这里插入图片描述

发布了596 篇原创文章 · 获赞 1120 · 访问量 189万+

猜你喜欢

转载自blog.csdn.net/morixinguan/article/details/105535626