Ubuntu下Qt5.9+opencv3.4 实现视频显示的简单界面

准备工作

安装Qt5.9

笔者使用的使用的是Ubuntu18.04,直接在Qt官网下上下载安装包,进行安装即可,可以免费使用.

编译安装opencv3.4

建议从源码进行编写,直接使用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

这样你当你添加好头文件时,编译运行就不会存在找不到各种函数让你抓狂报错的情况.

绘制简单的GUI界面

在左侧,双击打开<你的工程>.ui,会出现一个可视化的ui制作界面,如果不会操作,请花半小时进行Qtcreater的入门.
在这里插入图片描述
拖入一个Lable(用来显示图片)
两个pushBotton 来进行最基础的开始和停止.
给两个按钮target分别改名为begin和stop,自己随意起.
右键begin按钮,go to slot ,选择单击,即clicked() 就会在源文件mianWindow.cpp中生成一个子函数,同同事也会在头文件中产生申明.

void MainWindow::on_beginCaptureButton_clicked()
{}

接下来我们就要开始在Qt中调用opencv库了.

编写opencv显示图像的具体代码

建立图像显示所需的头文件

在左侧,工程的Headers中新建,一个video.h,因为我的后续还有很多内容,所以包含的头文件多,读者可以酌情删改

#ifndef VIDEOCAP_H
#define VIDEOCAP_H
//opencv的头文件
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
//一些标准库的头文件
#include <iostream>
#include <stdio.h>
//需要使用的Qt库中的头文件
#include <QWidget>
#include <QImage>
#include <QTimer>
//命名空间
using namespace cv;
using namespace std;
#endif // VIDEOCAP_H

编写video显示的函数

找到,begin键的触发函数,编写如下代码,主要的代码是从opencv自带例程中直接复制过来的,推荐大家有时间好好看看其历程.(切记在头文件中包含刚刚写好的"video.h")

void MainWindow::on_beginCaptureButton_clicked()
{

    Mat frame;
    //--- INITIALIZE VIDEOCAPTURE
    VideoCapture cap;
	///使用本地摄像机将其中的网址改为0
    cap.open("http://admin:admin@192.168.1.100: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;
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值