1> 该项目所用环境:qt-opensource-windows-x86-mingw491_opengl-5.4.0
2> 配置opencv库路径:
1、在D盘下创建一个opencv的文件夹,用于存放所需材料
2、在opencv的文件夹下创建一个名为:opencv3.4-qt-intall 文件夹
3、将资料中的opencv_library的install文件,复制到opencv3.4-qt-intall 文件夹中
4、将路径:D:\opencv\opencv3.4-qt-intall\install\x86\mingw\bin 放入电脑的系统路径中
3> 测试是否配置好
创建一个新的qt工程,将对应配置文件和头文件放入后,不报错就说明配置成功
配置文件内容:
- INCLUDEPATH += D:/opencv/opencv3.4-qt-intall/install/include
- INCLUDEPATH += D:/opencv/opencv3.4-qt-intall/install/include/opencv
- INCLUDEPATH += D:/opencv/opencv3.4-qt-intall/install/include/opencv2
- LIBS += D:/opencv/opencv3.4-qt-intall/install/x86/mingw/lib/libopencv_*.a
头文件:
- #include
- #include
- #include
- #include
- #include
-
- #include
- #include
- #include
-
- #include
-
- using namespace cv;
- using namespace cv::face;
- using namespace std;
1> Mat类,图像容器
2> 读取图像
- Mat imread( const String& filename, int flags = IMREAD_COLOR );
- //功能:读取出图像
- //参数:图像路径
- //返回值:读取的图像
3> 命名展示图像的窗口
- void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
- 功能:命名一个图像窗口
- 参数1:窗口名称
- 参数2:窗体尺寸,默认为自适应大小
- 返回值:无
4> 展示图像
- void imshow(const String& winname, const ogl::Texture2D& tex);
- //功能:展示图像
- //参数1:要展示图像的窗口名称
- //参数2:要展示的二维图像
- //返回值:无
案例
- #include "widget.h"
- #include
-
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Widget w;
- w.show();
-
-
- //1、定义一个图像容器
- Mat src;
-
-
- //2、将图像加载进来
- //函数原型:Mat imread( const String& filename, int flags = IMREAD_COLOR );
- //参数:图像的路径
- //返回值:图像容器
- src = imread("D:/opencv/resource/age.jpg");
-
-
- //4、命名一个展示图像的窗口
- //namedWindow("Test");
-
-
- //5、展示图像
- //函数原型:void imshow(const String& winname, const ogl::Texture2D& tex);
- //参数1:要展示图像的窗口名称
- //参数2:要展示的图像
- //返回值:无
- imshow("Test", src);
-
-
-
-
- return a.exec();
- }
-
1> 视频流类:VideoCapture
2> 打开视频:
- virtual bool open(const String& filename);
- //参数:要打开视频的路径
- //返回值:成功返回true失败返回false
3> 打开摄像头只需在构造时,调用构造函数参数传递0即可
4> 读取视频流中图像
- virtual bool read(OutputArray image);
- 功能:读取视频流中的图像
- 参数:图像容器
- 返回值:成功读取返回true,失败或者视频结束返回false
5> 图像翻转
- void flip(InputArray src, OutputArray dst, int flipCode);
- //将图像进行旋转
- //参数1:要处理的图像
- //参数2:处理后的图像容器
- //参数3:处理规则:0:表示沿x翻转,1表示沿y轴翻转,-1表示沿xy轴翻转
6> 休眠阻塞函数
- int waitKey(int delay = 0);
- 功能:阻塞等待用户输入数据,如果delay=0,则一直等待
- 参数:毫秒数
- 返回值:在等待过程中用户按下键的值
案例:
- #include "widget.h"
- #include
-
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Widget w;
- w.show();
-
-
- //1、定义视频流对象
- VideoCapture v(0); //表明使用摄像头构造一个视频流对象
-
-
- //2、读取摄像头中的图像
- Mat src; //用于存放读取出来的图像
-
-
- //函数原型:virtual bool read(OutputArray image);
- //功能:从视频流中读取一张图像放入参数中
- //参数:图像容器
- //返回值:成功返回真,失败或者读取视频结束返回假
- while(v.read(src))
- {
- //将图像进行翻转
- //函数原型:void flip(InputArray src, OutputArray dst, int flipCode);
- //参数1:要翻转的图像
- //参数2:翻转后的图像容器
- //参数3:翻转规则:正数表示按y轴翻转,0表示按x轴翻转,负数表示按xy轴翻转
- flip(src, src, 1);
-
-
- //展示图像
- imshow("Test1", src);
-
-
- //加延时函数
- //函数原型:int waitKey(int delay = 0);
- //参数:等待时间
- //返回值:在等待期间用户按下的键盘的ascii值 ESC键对应的值为27
- if(waitKey(20)==27)
- {
- break;
- }
- }
-
-
-
-
-
-
- return a.exec();
- }
1> 灰度处理
- void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
- 功能:转换图像色彩空间
- //参数1:要转换的图像
- //参数2:转变后图像容器
- //参数3:转换规则:BGR to gray
- 返回值:无
2> 均衡化处理
- void equalizeHist( InputArray src, OutputArray dst );
- 参数1:输入的灰度图像,必须是8-bit的单通道图像
- 参数2:输出的图像
- 图像直方图:对整个图像在灰度范围内的像素值(0-255)统计出现的频率,据此生成直方图,直 方图反应了图像的灰度分布情况。
- //1、实例化一个Mat对象
- Mat src; //存放原图
- Mat gray; //存放灰度图
-
-
- //2、实例化一个视频流对象,用于管理视频
- VideoCapture v;
-
-
- //3、打开视频
- //if(!v.open("D:\\opencv\\resources\\01.mp4")) //打开指定的文件视频
- if(!v.open(0)) //打开摄像头
- {
- QMessageBox::information(this, "失败", "视频打开失败");
- return ;
- }
-
-
- //4、读取视频
- while(v.read(src))
- {
- //将图像进行翻转
- flip(src, src, 1);
-
-
- //灰度处理
- cvtColor(src, gray, CV_BGR2GRAY);
-
-
-
-
-
-
- //展示读取的这一帧图像
- imshow("Test1", src);
- imshow("Test2", gray);
-
-
- //延时函数
- //函数原型:int waitKey(int delay = 0);
- //功能:延时等待用户操作键盘
- //参数:延时时长,以毫秒为单位
- //返回值:等待过程中用户敲下键盘的键值
- if(waitKey(20) == 27)
- {
- break;
- }
- }