opencv viz 模块的键盘操作 registerKeyboardCallback

opencv中键盘操作比较简单的是imshow中的

在imshow的窗口激活的时候 如果有按键按下 则可以使用waitKey()来获取键盘的键值

当然复杂一点也能使用回调函数来做 之前的博文中已经有相关的介绍了

就不在这里展开了


今天讲一讲最近使用点云显示模块viz时候

需要用一些交互 于是乎发现waitKey()在viz::Viz3d中不能起作用


下面详细说一下 viz中如何使用键盘交互

首先是先创建viz::Viz3d窗口对象

并使用成员函数键盘 - 回调函数

    viz::Viz3d win("Frame");
    win.registerKeyboardCallback(KeybdCallback);

然后实现该回调函数中函数指针的具体功能

这里的参数类型是参考了opencv原文中的

KeyboardCallback

typedef void(* cv::viz::Viz3d::KeyboardCallback) (const KeyboardEvent &, void *)


void KeybdCallback(const viz::KeyboardEvent &keyEvent, void *)
{
    if ((keyEvent.action == viz::KeyboardEvent::KEY_DOWN)
        && (keyEvent.code == 'a'))
    {
        printf("press a\n");
    }
}


再深一点

写成传参的回调函数

    int keyv = 0;
    win.registerKeyboardCallback(KeybdCallback, &keyv);

同样,需要实现该回调函数中函数指针的具体功能

void KeybdCallback(const viz::KeyboardEvent &keyEvent, void *val)
{
    int *pKey = (int *)val;

    if (keyEvent.action == viz::KeyboardEvent::KEY_DOWN)
    {
        if (keyEvent.code == 'a')
        {
            *pKey = 1;
            printf("Key 1\n");
        }
        if (keyEvent.code == 's')
        {
            *pKey = 2;
            printf("Key 2\n");
        }
        if (keyEvent.code == 'd')
        {
            *pKey = 3;
            printf("Key 3\n");
        }
    }
}

鼠标操作也是一个重要的交互方式

    int keyv = 0;
    win.registerMouseCallback(MsCallback, &keyv);

然后是回调函数

这里举例了右键操作的回调

打印鼠标坐标点(以左下角为原点O)

当val==1 则增加为2

void MsCallback(const viz::MouseEvent &mouseEvent, void *val)
{
    int *pMouse = (int *)val;

    if (mouseEvent.button == viz::MouseEvent::RightButton)
    {
        if (mouseEvent.type == viz::MouseEvent::MouseButtonPress)
        {
            cout << "Point: " << mouseEvent.pointer << endl;
            
            if (*pMouse == 1)
            {
                *pMouse = 2;
                printf("Key 2\n");
                return;
            }
        }
    }
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值