C# 通过OpenCV的camshift算法控制鼠标指针(或鼠标的基本功能)
我已经使用openCV的EmguCV包装器用C编写了一个程序。程序使用camshift算法跟踪对象。将围绕对象绘制一个矩形。光标按矩形的中心移动。输入来自网络摄像头 最初的问题是光标无法覆盖整个屏幕。它的移动仅限于帧大小。所以我应用了一个乘法因子: X方向移动的屏幕宽度/帧宽度 Y方向移动的屏幕高度/帧高度 这样鼠标就可以覆盖整个区域。但是鼠标移动不再平稳。我无法指出两个紧挨着的图标。如何使鼠标在覆盖整个屏幕时移动顺畅,就像真实鼠标一样 要指出显而易见的一点:鼠标实现的不平滑性来自这样一个事实,即camshift给出的矩形仅精确到一帧像素的精度,因此可能的最小移动将是屏幕大小/帧大小四舍五入到最近的屏幕像素 如果是这样的话,可以应用某种指针加速,就像使用真正的、低质量的鼠标一样。当然,如果是数千dpi激光鼠标,就没有必要这样做。基本上,光标在屏幕上移动的距离不是指针输入的距离(在本例中为camshift矩形位移),而是它的一个精心选择的函数。因此,使用加速函数fx,移动指针的步骤如下: 计算指针输入位移的向量,用v表示。 计算相应的单位长度向量,用u表示。 屏幕上的指针位移为v'=f | v |*u 我选择了像beta*e^alpha*x-1这样的形式的fx,其中0C# 通过OpenCV的camshift算法控制鼠标指针(或鼠标的基本功能),c#,opencv,computer-vision,emgucv,human-computer-interface,C#,Opencv,Computer Vision,Emgucv,Human Computer Interface,我已经使用openCV的EmguCV包装器用C编写了一个程序。程序使用camshift算法跟踪对象。将围绕对象绘制一个矩形。光标按矩形的中心移动。输入来自网络摄像头 最初的问题是光标无法覆盖整个屏幕。它的移动仅限于帧大小。所以我应用了一个乘法因子: X方向移动的屏幕宽度/帧宽度 Y方向移动的屏幕高度/帧高度 这样鼠标就可以覆盖整个区域。但是鼠标移动不再平稳。我无法指出两个紧挨着的图标。如何使鼠标在覆盖整个屏幕时移动顺畅,就像真实鼠标一样 要指出显而易见的一点:鼠标实现的不平滑性来自这样一个事实,
我选择了像beta*e^alpha*x-1这样的形式的外汇,其中0