本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-immagini-da-opencv-in-una-gui-con-qt-seconda-parte/


在第一部分教程之后,我们建立了一个Qt Widget在GUI中显示OpenCV图像,接下来我们要看看如何使用它。

现在我们建立一个简单的应用来绘制从网络摄像头中获取的流媒体视频,这是每一个OpenCV应用的基础。

本教程需要Qt Creator和Qt的基础知识,如果你觉得哪一步不清楚或是没有被充分的说明,请不要犹豫,立刻通过email联系我(原作者)。

让我们从打开Qt Creator开始。Qt也能在其他工作环境下使用( Eclipse, Visual Studio, ...) ,但是说实话我更喜欢在原汁原味的环境下使用它,为Qt专门设计的环境能更好的利用Qt的所有特性。

首先新建一个工程,选择 “Qt Widget Project” -> “Qt GUI Application”。

译者注:类名QtGLWebcamDemo,基类选择QMainWindow。

然后将第一部分教程建立的文件拷贝到工程文件夹中。

在工程中“添加现有文件”,“cqtopencvviewergl.h” 和 “cqtopencvviewergl.cpp”。

之后向我们的GUI中添加一个OpenGL-OpenCV 的部件。

  • 打开界面文件
  • 从左侧“Containers”中拖入一个标准的Widget
  • 将这个widget命名为“openCVviewer”
  • 选中这个widget,之后右键选择“提升为” (“Promote to”)
  • 在“提升的类名称”中输入“CQtOpenCVViewerGl”
  • 在窗体上右键,选择“布局”中的“栅格布局”,使得widget布满可用区域

基本的接口就准备好了,现在我们需要配置工程文件让其可以使用OpenCV:

  • 打开“pro”文件,添加:INCLUDEPATH += 你的OpenCV目录 (对于Linux: INCLUDEPATH += /usr/local/opencv2/)
  • 再添加 LIBS += -lopencv_core -lopencv_highgui

译者注:如果你是按照译者之前关于Qt&OpenCV的博客中配置的开发环境,可按如下格式修改pro文件:

INCLUDEPATH += D:\opencv_mingw\install\include

LIBS += "D:\opencv_mingw\bin\libopencv_*.dll"

现在这个程序已经准备好应用OpenCV了,我们可以开始写代码来显示摄像头的图像了。

在窗体中的菜单栏中插入一个“Start”项:

  • 选择菜单栏,点击“在这里输入”,输入“Camera”
  • 选择“Camera”,在下拉菜单中的“在这里输入”中,输入“Start”

在“Action Editor”栏中的“actionStart” 项上右键,选择“转到槽”->”triggered()”。

Qt Creator 会自动生成一个函数,当用户点击 “Camera”中的”Start”时就会调用这个函数。

在这里,我们的函数很简单:

void QtGLWebcamDemo::on_actionStart_triggered()
{
if( !mCapture.isOpened() )
if( !mCapture.open( 0 ) )
return; startTimer(50);
}

mCapture 是我们的GUI中的一个私有变量:

cv::VideoCapture mCapture;

要记住,为了使用VideoCapture ,必须在程序中包含OpenCV的 “HighGUI” 模块。

#include <opencv2/highgui/highgui.hpp>

这个应用要使用定时器,我们每一个50ms获取新的摄像头图像,并且将图像传递给我们的OpenGL widget。

在主要的类中添加定时器函数。

protected:
void timerEvent(QTimerEvent *event);

它包含了如下的简单代码:

void QtGLWebcamDemo::timerEvent(QTimerEvent *event)
{
cv::Mat image;
mCapture >> image; // Show the image
ui->openCVviewer->showImage( image );
}

这个使用了Qt、OpenCV、OpenGL来显示摄像头图像的简单应用就准备好了,你只需要编译运行就可以看看效果了。

完整代码可在Github上获取:

https://github.com/Myzhar/QtOpenCVViewerGl

[OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget(第二部分)的更多相关文章

  1. [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget (第一部分)

    本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...

  2. 【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.    文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云( ...

  3. 布局(layout)文件图形界面不能显示:An error has occurred. See error log for more details. java.lang.NullPointe

    #问题解析# Android工程中Layout文件夹下的布局文件图形界面无法显示,一般发生这种情况在导入工程操作后极易出现,因为可能eclipse使用的sdk版本不同,target类型不同,所用And ...

  4. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释

    1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...

  5. 转 在PowerDesigner的PDM图形窗口中显示数据列的中文注释

    Name是名称(字段描述),Code是字段名称,Comment是注释名称,ER图中显示的是Name.一般设计时,Name跟comment都设计成描述, 而设计时候常把comment写成中文,name保 ...

  6. PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法大全及对比分析

    一. 概述 PyQt的图形界面应用中,事件处理类似于Windows系统的消息处理.一个带图形界面的应用程序启动后,事件处理就是应用的主循环,事件处理负责接收事件.分发事件.接收应用处理事件的返回结果, ...

  7. OpenCV - Linux(Ubuntu 16.04)中安装OpenCV + OpenCV_Contrib

    近两个月来接触了Linux系统,在老板的建议下翻了Ubuntu的牌子,我安装的版本是16.04,用习惯之后感觉蛮好的,比Windows要强.好啦,废话不说啦,下面开始说在Ubuntu中安装OpemCV ...

  8. 将图片在指定窗口中显示-OpenCV应用学习笔记一

    1.OpenCV模块划分 OpenCV其实就是一堆用C和C++语言来实现计算机视觉算法的源代码文件:例如C接口函数cvCany()实现了Canny边缘提取算法,我们可以直接将这些源代码添加到自己的软件 ...

  9. 关于web2py外网访问,图形界面不显示等问题的解决办法

    首先系统版本是ubuntu 15.04,系统默认安装了两个版本的python, sudo python web2py.py 默认会调用python2.7版本来执行 会提示 pydo@planpls:/ ...

随机推荐

  1. JMter压力测试

    一. 压力测试场景设置 一般我们在做压力测试的时候,分单场景和混合场景,单场景也就是咱们压测单个接口的时候,多场景也就是有业务流程的情况下,比如说一个购物流程,那么这样的场景就是混合场景,就是有多个接 ...

  2. Java堆空间溢出解决方法 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

    一般通过java -jar filename.jar运行jar包,但是当运行的java程序需要较大的内存时,可能会造成堆空间溢出. 例如,加载了几个G大小的json文件,运行报错: Exception ...

  3. TortoiseGit使用入门

    TortoiseGit使用入门 本地使用Git 首先要确定TortoiseGit已找到msysgit,如果先安装msysgit 再装TortoiseGit, 一般TortoiseGit 就会自动的识别 ...

  4. HDU1800 hash+去前导0

    注意一:卡map的时间,但是好好写+运气还是可以卡过,哇...求人品爆发 注意二:去前导0,毕竟‘0’也有ASCII码 #include<cstdio> #include<cstdl ...

  5. 【2018.06.26NOIP模拟】T3节目parade 【支配树】*

    [2018.06.26NOIP模拟]T3节目parade 题目描述 学校一年一度的学生艺术节开始啦!在这次的艺术节上总共有 N 个节目,并且总共也有 N 个舞台供大家表演.其中第 i 个节目的表演时间 ...

  6. C#-StructLayoutAttribute(结构体布局)

    struct实例字段的内存布局(Layout)和大小(Size) 在C/C++中,struct类型中的成员的一旦声明,则实例中成员在内存中的布局(Layout)顺序就定下来了,即与成员声明的顺序相同, ...

  7. jekyll 安装使用

    1. 安装     条件: ruby gem 注意版本,同时建议使用国内的镜像 gem install jekyll bundler   2. 创建网站   jekyll new my-awesome ...

  8. Mathtype启动失败与Microsoft公式编辑器Equation的问题处理案例

    最近写毕业论文需要使用Mathtype,安装成功后,启动Word,使用Mathtype,出现各种问题. 遇到的问题: 1.弹出“用于创建对象的程序是Equation.您的计算机尚未安装此程序.若要编辑 ...

  9. FastAdmin env.sample 的用法

    FastAdmin env.sample 的用法 在 FastAdmin 的 1.0.0.20180513 中我提交了一个 PR,增加 env.sample 内容如下: [app] debug = f ...

  10. (转)Android内存泄漏分析及调试

      http://blog.csdn.net/gemmem/article/details/13017999 此文承接我的另一篇文章:Android进程的内存管理分析  首先了解一下dalvik的Ga ...