我试图在OpenCV中使用密集的光流来推断物体的运动方向。我使用calcOpticalFlowFarneback()
获取流量坐标,使用cartToPolar()
获取指示方向的矢量角度。
为了解释结果,我需要知道测量角度的参考点。我发现this博客帖子表明角度范围是360°。这告诉我角度测量将沿着单位圆的线。我无法理解这一点。
cartToPolar()
的文档不包括此内容,我测试它的尝试失败了。
答案 0 :(得分:3)
似乎cartToPolar()
产生的角度是指以左上角的图像坐标起点为中心顺时针旋转90°的单位圆。 It would look like this.
我使用OpenCV提供的dense optical flow example得出了这个结论。我将行hsv[...,0] = ang*180/np.pi/2
替换为hsv[...,0] = ang*180/np.pi
以从弧度获得正确的角度转换。然后我测试了一个视频,人们从右上角移动到左下角,反之亦然。我用GIMP对主色进行采样并得到RGB值,我将其转换为HSV值。色调值对应于以度为单位的角度。
人们从右上角向左下方移动产生大约300°的角度,而另一方向移动的人产生大约120°的角度。这暗示了单位圆的定位方式。
答案 1 :(得分:0)
查看code,fastAtan32f
用于计算角度。这似乎是atan2
实施。