OpenCV中phase()的符号角

时间:2014-01-12 11:17:45

标签: c++ opencv orientation angle

OpenCV中用于phase()(以及cartToPolar())函数的手册表示它使用等式<返回0-360度范围内的x和y梯度的旋转角度(使用TRUE参数) / p>

atan2(y(i),x(i)) * 180/pi           

但是,手动应用某些随机x / y渐变值并使用相同的上述等式,我得到带有符号值的结果

示例:

Gx = 46且Gy = -22

atan2(-22/46)* 180 / 3.14 = -25.572929

而结果使用phase()= 334.437073

是的,它们是相同的角度,但我想保留标志(如果可能的话)使用功能而不使用手动迭代。在OpenCV中是否有功能(或技巧)?谢谢:))

3 个答案:

答案 0 :(得分:0)

似乎我无法在OpenCV中找到一个能够解决问题的功能。 但是,唯一剩下的就是使用循环和应用 if (angle>180) { angle = angle-360; }

答案 1 :(得分:0)

当您遍历每个像素时, 使用上述公式计算角度,但使用 float / double 值,并将其存储到相应的cv :: Mat varName

for y.rows
 for x.cols
   //calculate angle ( formula from above)
   // Hint: Use same access to G_x and G_y gradients
   *varname*.at<float>(y,x) = angle;
 end for
end for

答案 2 :(得分:0)

只是偶然发现了与OpenCV 3.4相同的问题,并想知道为什么返回的角度与通过标准C函数 atan2()获得的角度不同。

事实证明,OpenCV文档中 phase()函数的文档具有误导性,因为使用标准 atan2()计算角度不是 函数,但使用OpenCV自己的实现 fastAtan2(),该函数返回角度范围(以度为单位,介于0°和360°之间,而不是C所指定的-π和π之间) atan2 的标准。