- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
而且现在有了强大的opencv图像处理库,实现这样的虚拟激光投射键盘变得易如反掌。
投影键盘的基本原理。键盘由三个主要部件组成:摄像头、键盘图案投射器、一字线性感应激光头。见下图:
图上从上到下分别是键盘图案投射器、摄像头、一字线性感应激光头。当然,摄像头放在键盘图案投射器上面也是可以的,比如。1. 键盘图案投射器在平坦的桌面投出清晰键盘图案2. 最底下的一字线性激光(一般采用红外线的,这样眼睛不可见)发出一字型激光,平行于桌面射出,这样如果手指有按键活动,会在手指上形成激光光斑3. 摄像头捕获激光光斑,对应于键盘图案映射的位置,就可以知道哪些键被按下OK,原理很简单,剩下的关键就是摄像头的图像处理算法了,而且现在有了opencv,实现也不是难事。这里说一下实现方法。
由于人眼对激光的反应不一样,780nm-808nm的激光人眼不敏感,可看到微弱的一丝红光。850nm至1064nm波长人眼不可见,通过红外感光仪器等专业设备可以看到,其中808-850nm通过摄像头可以看到。980-1064nm通过倍频片可以看到。所以我在网上买了一个808nm-810nm 红外一字线激光器。这样配上滤光片,可以滤去绝大多数其他波长的杂光,只剩下红外激光的光斑。这样做的好处是减少干扰,增加键盘的可靠性,而且使算法处理更加简单有效。加上前面的650nm虚拟键盘激光组件,总共也就花了100块钱左右。
25mw 808nm-810nm 红外一字线激光器 激光头
直径18mm可见光截止400-750nm滤光片,800-1000nm高透
在摄像头上看到的红外激光光斑投射到手指的图像如下图:
对于光斑的跟踪我找了个现成的opencv扩展库cvblob,具体可以参考它的文档和例子,google code上有这个项目的托管。待会儿会奉上代码。cvblob可以跟踪多个光斑,所以很容易就可以实现ctrl+alt+delete之类的组合键。
再来两张键盘图:
顺便说一句,本文中的摄像头放的位置只能捕捉到部分键盘图像,所以demo只是演示了部分键盘的按键。不过丝毫不影响原理介绍。如果要获得全部键盘图像,或者去买一个广角的摄像头,或者把这个摄像头位置提高,不是什么难事。时间有限,不想折腾了。
代码:
#include iostream#include iomanip
#include opencv/cv.h#include opencv/highgui.h
#include cvblob.husing namespace cvb;
typedef struct key{char c;int x0;int y0;int x1;int y1;};
key g_keymap[] ={{4,525,350,588,419},{5,442,345,504,414},{6,360,339,422,408},{7,277,332,342,404},{8,198,327,259,399},{9,121,320,174,389},{0,41, 318,94, 383},{E,528,274,590,337},{R,443,267,507,332},{T,359,263,428,327},{Y,280,259,344,321},{U,199,251,261,315},{I,119,246,179,307},{O,41, 240,96, 301},{D,504,203,567,259},{F,424,199,489,257},{G,348,194,410,251},{H,266,187,329,245},{J,192,183,251,241},{K,117,178,171,236},{L,42 ,174,92, 229},{X,543,144,605,197},{C,467,139,530,191},{V,392,135,457,190},{B,316,128,377,181},{N,242,124,299,176},{M,171,118,225,172},{,98, 114,149,166},{,26, 108,73, 159},{_,182,62, 531,127},};
int g_key_num = sizeof(g_keymap)/sizeof(key);
int main(){CvTracks tracks;
cvNamedWindow(red_object_tracking, CV_WINDOW_AUTOSIZE);
CvCapture *capture = cvCaptureFromCAM(0);cvGrabFrame(capture);IplIma
您可能关注的文档
- 黑龙江省哈六中2017届高二上学期期末考试生物详解.doc
- 黑龙江省哈三中2015届高三第一次高考模拟考试理综化学试题(含详细解析)详解.doc
- 黑龙江省牡丹江市高中名校2016届高三上学期期末考试语文试卷及答案详解.doc
- 黑龙江省齐齐哈尔市2015年中考历史试题(word版,含答案)详解.doc
- 黑龙江省齐齐哈尔市第四中学2014-2015学年高一上学期期中考试语文试题(无答案)详解.doc
- 黑龙江省双鸭山一中2015届高三上学期期末考试历史试题详解.doc
- 黑龙江省绥棱一中2016高考政治一轮复习测试(三十二)详解.doc
- 黑龙江省绥棱一中2016高考政治一轮复习测试(四十九)详解.doc
- 黑龙江省绥棱一中2016高考政治一轮复习测试(五十九)详解.doc
- 黑龙江省铁力市2015届九年级语文下学期第二次模拟考试试题详解.doc
文档评论(0)