文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏
参与翻译: 可可 (3)

目标

本文中你将学会

  • 打开一个可视化窗口
  • 根据名称访问窗口
  • 开始事件循环
  • 给定一个时间开始事件循环

代码

代码下载地址 here.

#include <opencv2/viz/vizcore.hpp>
#include <iostream>

using namespace cv;
using namespace std;

/**
* @function main
*/
int main()
{
    /// Create a window
    viz::Viz3d myWindow("Viz Demo");

    /// Start event loop
    myWindow.spin();

    /// Event loop is over when pressed q, Q, e, E
    cout << "First event loop is over" << endl;

    /// Access window via its name
    viz::Viz3d sameWindow = viz::getWindowByName("Viz Demo");

    /// Start event loop
    sameWindow.spin();

    /// Event loop is over when pressed q, Q, e, E
    cout << "Second event loop is over" << endl;

    /// Event loop is over when pressed q, Q, e, E
    /// Start event loop once for 1 millisecond
    sameWindow.spinOnce(1, true);
    while(!sameWindow.wasStopped())
    {
        /// Interact with window

        /// Event loop for 1 millisecond
        sameWindow.spinOnce(1, true);
    }

    /// Once more event loop is stopped
    cout << "Last event loop is over" << endl;
    return 0;
}
第 1 段(可获 2 积分)

解释

下面是本程序所使用的数据结构:

  • Create a window.
/// 创建一个窗口
viz::Viz3d myWindow("Viz Demo");
  • 开始时间循环。该时间循环将一直运行,除非你按 E 或者 Q 键退出
/// 开始时间循环
myWindow.spin();
  • 可通过名称访问相同的窗口。因为窗口时间隐式共享的。sameWindows 和 myWindows 是指向同一个对象的。如果名称不存在的话就会创建一个新的窗口。
/// 根据名称访问窗口
viz::Viz3d sameWindow = viz::get("Viz Demo");
  • 启动时间循环控制器。一旦启动 wasStopped 就会被设置为 false。在事件循环内部,每一次循环就会调用一次 spinOnce 方法来防止时间循环完全停止。在 while 循环内部,你可以执行其他的语句与窗口进行交互。
第 2 段(可获 2 积分)
/// Event loop is over when pressed q, Q, e, E
/// Start event loop once for 1 millisecond
sameWindow.spinOnce(1, true);
while(!sameWindow.wasStopped())
{
    /// Interact with window

    /// Event loop for 1 millisecond
    sameWindow.spinOnce(1, true);
}

运行结果

下图是程序的运行结果:

Launching Viz

第 3 段(可获 2 积分)

文章评论