加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

opencv下模拟实现的简单文本输入窗口

发布时间:2020-12-14 05:37:22 所属栏目:Windows 来源:网络整理
导读:自己写点小东西,需要使用一个能输入字符串的窗口,理想效果就是:回车键一按,呼出一个输入框;接着一通命令敲进去;再回车键一按,完成输入,窗口关闭;然后从小就得到这个输入的字符串了。 记得windows的API似乎有类似的功能,但是对windows不熟,网上找

自己写点小东西,需要使用一个能输入字符串的窗口,理想效果就是:回车键一按,呼出一个输入框;接着一通命令敲进去;再回车键一按,完成输入,窗口关闭;然后从小就得到这个输入的字符串了。

记得windows的API似乎有类似的功能,但是对windows不熟,网上找了一圈也没找到合适的,看来windows窗口用起来也不是那么轻松的。

只能自己写一个了,好在opencv模拟这种功能的窗口还挺简单。

这里记录一个最简陋的实现,以后有需要更精细的版本再完善吧。

?

 ?

文本输入主要是通过waitKey()函数实现的,可以支持ascll表字符的输入,无法进行中文输入,不过暂时也用不上。

代码如下:

 

#include<Opencv2opencv.hpp>
#include<windows.h>  
using namespace cv;

string input_command1()
{//仅支持ascll表字符输入,不支持中文
    string command = "";
    cvNamedWindow("Input Command");
    bool flag = true;
    while (true)
    {
        Mat input_box = Mat(Size(600,50),CV_8UC3,Scalar(0,0,0));
        if (flag)
            putText(input_box,command,Point(10,30),CV_FONT_HERSHEY_COMPLEX,0.7,Scalar(255,255,255),2,8);
        else
            putText(input_box,command + "|",Point(10,8);
        flag = !flag;
        imshow("Input Command",input_box);
        int key_vaule = waitKey(1000);//waitKey()的键值等于ascll编码,未等到输入时的返回值是-1

        if (key_vaule == 13)//回车键完成输入
            break;
        else if (key_vaule == -1)//无输入
            continue;
        else if (key_vaule == 8)//回退键,删除一位输入
        {
            if (!command.empty())
                command.pop_back();
        }
        else
            command += key_vaule;
        //command += to_string(key_vaule);
    }
    cvDestroyWindow("Input Command");
    return command;
}

void main()
{
    HWND hwnd = GetForegroundWindow();//获取最前端窗口(即控制台窗口)句柄
    ShowWindow(hwnd,0);//隐藏该窗口

    Mat img = Mat(Size(300,400),CV_8UC3);
    namedWindow("img");
    imshow("img",img);
    while (true)
    {
        if (waitKey() == 13)
        {
            string command = input_command1();
            if (command == "exit")
                exit(0);
        }
    }
}

?

效果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读