红外激光键盘的原理总结详解.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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.h using 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

文档评论(0)

boss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档