我想实现的效果是这样子的:主机装有“监控用”摄像头,通过视频采集卡采集图像。想实现的功能是,当有人经过,或对摄像头挥手时,能控制“鼠标指针”在屏幕上做出相应的移动,比如:有人经过时,鼠标指针会跟着他走的方向移动,或当有人挥手时,手往左边摆动,鼠标指针在屏幕上做往左移动的动作。求各位高手不吝赐教。说说怎么实现,最好给出代码。

解决方案 »

  1.   


    转载的~嘎嘎我没这么牛!(暂没考虑运行效率)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调大些,再搜索,直到找到或者误差大于所允许的最大值为止。试验中该方法效果很好)。
    试验结果证明:该方法确实可以实现鼠标移动的控制,但由于没考虑运行效率,所以效果不好。   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.     }  
      

  2.   


    感谢,您是第一个给我贴上代码来的,这个java版的,我也曾看到过,甚至还有一段更加复杂的计算。现在只想用C#来实现,谢谢您的帮助
      

  3.   

       给点你建议吧,我们用过C#做过摄像头捕捉运动。
       C#+DirectShow完全可以实现,你尝试到codeproject网站上去下载 C#的Motion detector运动检测算法,老外都附带源代码,
      

  4.   


    这个是不是先问下厂家,看看厂家的API能否提供帮助。
      

  5.   

    http://v.youku.com/v_show/id_XMjE1NjMyNDUy.html