笔者使用的使用的是Ubuntu18.04,直接在Qt官网下上下载安装包,进行安装即可,可以免费使用.
建议从源码进行编写,直接使用apt-get,opencv的版本容易出问题,而且少了好很多opencv官方带的好例子进行参考.
在file中选择创建新的工程,类型为Application 中最常用的Qt Widgets Application.
打开新建工程自己生成的<你的工程名>.pro文件,在其末尾添加上opencv的依赖项,这里为了方便就添加了所有的,没有进行筛选,opencv共享库的后缀为.so,注意查询其具体的位置,在终端中是用
locate opencv
在其中找到如下的.so库(图中为部分显示)
/usr/local/lib/libopencv_calib3d.so
/usr/local/lib/libopencv_calib3d.so.3.4
/usr/local/lib/libopencv_calib3d.so.3.4.3
/usr/local/lib/libopencv_core.so
/usr/local/lib/libopencv_core.so.3.4
/usr/local/lib/libopencv_core.so.3.4.3
/usr/local/lib/libopencv_dnn.so
/usr/local/lib/libopencv_dnn.so.3.4
/usr/local/lib/libopencv_dnn.so.3.4.3
/usr/local/lib/libopencv_features2d.so
/usr/local/lib/libopencv_features2d.so.3.4
/usr/local/lib/libopencv_features2d.so.3.4.
在<你的工程>.pro,文件的末尾添加上下列代码,其中 usr/local/lib/ 就是你在电脑上安装opencvlib库的位置,每个人可能都不同,如果报错了,回头检查下.
LIBS += /usr/local/lib/libopencv_*.so
这样你当你添加好头文件时,编译运行就不会存在找不到各种函数让你抓狂报错的情况.
在左侧,双击打开<你的工程>.ui,会出现一个可视化的ui制作界面,如果不会操作,请花半小时进行Qtcreater的入门.
拖入一个Lable(用来显示图片)
两个pushBotton 来进行最基础的开始和停止.
给两个按钮target分别改名为begin和stop,自己随意起.
右键begin按钮,go to slot ,选择单击,即clicked() 就会在源文件mianWindow.cpp中生成一个子函数,同同事也会在头文件中产生申明.
void MainWindow::on_beginCaptureButton_clicked()
{
}
接下来我们就要开始在Qt中调用opencv库了.
在左侧,工程的Headers中新建,一个video.h,因为我的后续还有很多内容,所以包含的头文件多,读者可以酌情删改
#ifndef VIDEOCAP_H
#define VIDEOCAP_H
//opencv的头文件
#include
#include
#include
//一些标准库的头文件
#include
#include
//需要使用的Qt库中的头文件
#include
#include
#include
//命名空间
using namespace cv;
using namespace std;
#endif // VIDEOCAP_H
找到,begin键的触发函数,编写如下代码,主要的代码是从opencv自带例程中直接复制过来的,推荐大家有时间好好看看其历程.(切记在头文件中包含刚刚写好的"video.h")
void MainWindow::on_beginCaptureButton_clicked()
{
Mat frame;
//--- INITIALIZE VIDEOCAPTURE
VideoCapture cap;
///使用本地摄像机将其中的网址改为0
cap.open("http://admin:[email protected]:8081/");
// check if we succeeded
if (!cap.isOpened()) {
cerr << "ERROR! Unable to open camera\n";
}
//--- GRAB AND WRITE LOOP
cout << "Start grabbing" << endl
<< "Press any key to terminate" << endl;
for (;;)
{
// wait for a new frame from camera and store it into 'frame'
cap.read(frame);
// check if we succeeded
if (frame.empty()) {
cerr << "ERROR! blank frame grabbed\n";
break;
}
// show live and wait for a key with timeout long enough to show images
// show video inQT
//将opencv的图像转化为Qt中的图像格式
QImage image = QImage((const uchar*)frame.data,frame.cols,frame.rows,QImage::Format_RGB888).rgbSwapped();
//重新调整图像大小以适应窗口,图像往往会大于你的lable框大小,会显示补全
image=image.scaled(ui->label->size(),Qt::IgnoreAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(image));
if (waitKey(5) >= 0)
break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
}
最后就可以编译运行了,界面非常简陋,但是确实在Qt中使用opencv的完整过程,希望大家可以在其中获得借鉴.
单击begin;