先了解对应的模块:
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;
}
运行效果:
按一下左右翻转:
再按一下上下翻转:
来源:oschina
链接:https://my.oschina.net/u/4321696/blog/3236703