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); } } } ? 效果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |