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中是否有功能(或技巧)?谢谢:))
答案 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 的标准。