可以使用OpenCV提供cvFindContours对先前与处理得到的光斑画面进行轮廓提取
发布时间:2013/11/10 18:05:52 访问次数:5849
cvFindContours对先前与处理得到的光斑画面进行轮廓提取,AT34C02进而求懈出每个光斑区域在图像中的位置,如图27所示。进一步,我们通过质心法并以光斑亮度作为权重,可以大致求解出每个指尖中心的大致坐标。虽然这个中心坐标未毖真的在指尖中心,但相比简单的以光斑区域中心作为指尖中心的方法耍精确很多。
目前OpenCV中提供了Kd-tree的实现,不过我在使用过程中遇到了诸多问题,尤其是它可能会导致程序崩溃,因此我使用了由Martin F Krafft开发的基于C++模板的Kd -tree实现libkdt-ee++。
得到键盘图案坐标的另一个好处是可以在PC上重新绘制出一个软键盘,用于提示当前“按下”的按键,提高使用体验,如图32所示。
在得到用户按下键盘按键的信息后,就要考虑将这些按键注入到当前的系统中,使得我们的投影键盘能够作为一个真正的键盘来使用。这里我没有采用最直接的编写系统驱动程序的办法,虽然那样性能最好、最直接,但会额外增加制作时间。我采用Windows系统提供的SendlnputAP|向系统注入键盘事件。
该APi允许应用程序向整个系统注入任意的键盘事件,在实际效果上,已经和编写驱动程序的效果没有区别,像系统输入法等特性也可以很好地支持,如图33所示。另外,这样做也可以保证我们所有的处理程序都在用户态模式运行,可以很容易地把我们的代码移植到Mac OS或者Linux下运行。
不过前面我们得到的按下按键信息还不能直接注入到系统,迹需要额外处理如下两件逻辑:模拟组合键、模拟连发事件。
对于组合键的模拟其实比较容易,一方面我们的设计可以保证多按键同时输入,对于Ct一十C这样的组合键,不需要做额外处理,只要将当前的实际按键传输给os即可。而对于键盘的功能键,比如Fn+Fl这种特殊用途的按键,就需要编写程序特殊实现。
对于连发事件,os就没有提供什么特殊帮助了,需要我们自己来模拟。
cvFindContours对先前与处理得到的光斑画面进行轮廓提取,AT34C02进而求懈出每个光斑区域在图像中的位置,如图27所示。进一步,我们通过质心法并以光斑亮度作为权重,可以大致求解出每个指尖中心的大致坐标。虽然这个中心坐标未毖真的在指尖中心,但相比简单的以光斑区域中心作为指尖中心的方法耍精确很多。
目前OpenCV中提供了Kd-tree的实现,不过我在使用过程中遇到了诸多问题,尤其是它可能会导致程序崩溃,因此我使用了由Martin F Krafft开发的基于C++模板的Kd -tree实现libkdt-ee++。
得到键盘图案坐标的另一个好处是可以在PC上重新绘制出一个软键盘,用于提示当前“按下”的按键,提高使用体验,如图32所示。
在得到用户按下键盘按键的信息后,就要考虑将这些按键注入到当前的系统中,使得我们的投影键盘能够作为一个真正的键盘来使用。这里我没有采用最直接的编写系统驱动程序的办法,虽然那样性能最好、最直接,但会额外增加制作时间。我采用Windows系统提供的SendlnputAP|向系统注入键盘事件。
该APi允许应用程序向整个系统注入任意的键盘事件,在实际效果上,已经和编写驱动程序的效果没有区别,像系统输入法等特性也可以很好地支持,如图33所示。另外,这样做也可以保证我们所有的处理程序都在用户态模式运行,可以很容易地把我们的代码移植到Mac OS或者Linux下运行。
不过前面我们得到的按下按键信息还不能直接注入到系统,迹需要额外处理如下两件逻辑:模拟组合键、模拟连发事件。
对于组合键的模拟其实比较容易,一方面我们的设计可以保证多按键同时输入,对于Ct一十C这样的组合键,不需要做额外处理,只要将当前的实际按键传输给os即可。而对于键盘的功能键,比如Fn+Fl这种特殊用途的按键,就需要编写程序特殊实现。
对于连发事件,os就没有提供什么特殊帮助了,需要我们自己来模拟。
热门点击