用我手中的手机代表玩具枪,我移动它(“瞄准”,如果你愿意的话)并将方向数据(俯仰,偏航,滚动)传输到我的笔记本电脑,在那里我渲染一个相对于一个移动的十字准线网络摄像头馈送指向前方。
我通过让用户在将手机直接放在他们面前时按下笔记本电脑上的 Enter 来启动应用程序 - 这是初始校准步骤,我使用初始偏航/俯仰作为瞄准中心的参考。
然后在相机馈送循环中,在我绘制十字准线的地方,我测量俯仰/偏航相对于那些初始校准值的变化,并使用它们来重绘十字准线左/右/上/下。
这是我当前的代码:
pitchDiff = initPitch - newPitch #corresponds to Y axis
yawDiff = 0-(initYaw - newYaw) #corresponds to X axis
pitchChangeFactor = 10
yawChangeFactor = 10
xC = int((imgWidth/2) + yawDiff*yawChangeFactor)
yC = int((imgHeight/2) - pitchDiff*pitchChangeFactor)
## THE TARGETING GUI
cR = 40 #circle radius
cv2.circle(img, (xC,yC), cR, (20, 20, 255), 3)
我在这个问题中要求的是如何更准确、更顺利地做到这一点。陀螺仪数据很嘈杂,所以当我每 30 帧/秒采样一次时,我实际上取了大约 60 个陀螺仪读数的中位数来表示俯仰/偏航。
另外,我认为我的动态模型是错误的:我只是根据角度的变化在屏幕上以恒定的量移动目标十字准线。我认为需要三角函数,但我不清楚我应该尝试什么。仅使用 1 个摄像头,我显然缺乏深度数据。但是,我可以假设我想瞄准的目标是我面前的 3-4 米。
感谢您的任何帮助