日期:2014-05-18  浏览次数:20953 次

如何使用C#技术实现“摄像头互动鼠标”的功能?
我想实现的效果是这样子的:主机装有“监控用”摄像头,通过视频采集卡采集图像。

想实现的功能是,当有人经过,或对摄像头挥手时,能控制“鼠标指针”在屏幕上做出相应的移动,比如:有人经过时,鼠标指针会跟着他走的方向移动,或当有人挥手时,手往左边摆动,鼠标指针在屏幕上做往左移动的动作。

求各位高手不吝赐教。说说怎么实现,最好给出代码。

------解决方案--------------------

这要大牛来啊。。。沙发坐起学习
------解决方案--------------------
高科技的东西..感觉很难.关注中..
------解决方案--------------------
可以设置移动侦测, 以像素为单位,根据对比像素刷新的大小来设置你鼠标移动的方向;
主要问题是先设置移动侦测的范围 比如32*32像素为单位 每当有一定物体大于这个单位 就出发你鼠标移动的方位 大概思路就是这样
------解决方案--------------------
我的本本华硕的,在系统登录的时候有人脸识别功能,这个软件不知道如何开发的,我也想知道原理和实现技术。
------解决方案--------------------
关注中
------解决方案--------------------

转载的~嘎嘎我没这么牛!

(暂没考虑运行效率)

1. 从摄像头中截取一张图片
2. 在图片中搜索红点的坐标,并做记录
3. 再次从摄像头中截取一张图片
4. 获取红点坐标
5. 比较两次红点的坐标即可判断鼠标要移动的方向
6. 调用Robot类(since: jdk1.2)的方法来移动鼠标

第2步细分:
0). error = 20 ; // 所允许的最大误差
1). 取像素的色值:RGB(r,g,b) 放到数组 a=[r,g,b]
2). b = [255,0,0] (红色)
3). 计算 a和b的欧几里德距离
4). 如果距离小于error,该节点就是要搜索的点

(第2步可以采取递归实现,先将误差值设置小一点,第一次如果没找到,就将误差error调大些,再搜索,直到找到或者误差大于所允许的最大值为止。试验中该方法效果很好)。


试验结果证明:该方法确实可以实现鼠标移动的控制,但由于没考虑运行效率,所以效果不好。

Java code
   1. /** 
   2.      * 欧几里德距离 
   3.      * @param a  
   4.      * @param z 
   5.      * @return 
   6.      */  
   7.     public static double getDistance(double[] a, double[] z){  
   8.         double rs = 0;  
   9.         int d = a.length;  
  10.         for( int i = 0; i < d ; i++){  
  11.             double r = Math.pow(a[i] - z[i],2);   
  12.             rs += r;  
  13.         }  
  14.           
  15.         return Math.pow(rs, 0.5);  
  16.     }

------解决方案--------------------
牛X的人啊!
------解决方案--------------------
这是一个猜测:
通过摄像头获取一个方框图。如果图片在X时间内没变化识别功能不启用(此图作为标准对比图)。如果有人过,那么图就不同,图不同就启用识别功能。在摄像框中设一个焦点(一般是中心)也就是“十”字。人或手动,那么图片中的连续像素一定大幅变化,“十”字默认设为大幅变化像素坐标的中心。这样就会跟着动了。至于如何识别图像的不同,对比两张图片相似度。如果有人从摄像头前过,那必然会有大量在原位置(坐标)的像素变化(且是邻居像素)。
------解决方案--------------------
做过,但效率极低,画面越大速度真慢.
------解决方案--------------------
人脸或者动作识别 不是论坛上一句两句能说清楚的。。
------解决方案--------------------
已经有这样的东西了,有一种摄像头操控的游戏,玩家能够在摄像头面前挥动手脚来进行颠球,打海盗等小游戏,是用vc++开发的
------解决方案--------------------
他能够这样做,证明已经能感知摄像头摄入影响相对于显示荧幕的坐标了,那时候操作鼠标肯定是没问题的,那游戏还要更难,比如颠球,你如何去知道摄入信息是如何对球体进行打击...
------解决方案--------------------
觉得你的问题的关键在于如何对采集的图像作识别的问题,比较定时采样的两个图像的差别
------解决方案--------------------
给点你建议吧,我们用过C#做过摄像头捕捉运动。
C#+DirectShow完全可以实现,你尝试到codeproject网站上去下载 C#的Motion detector运动检测算法,老外都附带源代码,
------解决方案--------------------
OK,我要下载,我要下载,我要下载,我要下载
------解决方案--------------------
需要调用c++吗?
------解决方案--------------------
学习!!!!!!!!!!!
------解决方案--------------------
探讨
求解中.......

------解决方案--------------------