OpenCV中phase()的符号角

问题描述 投票:0回答:3

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

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中是否有功能(或技巧)?谢谢 :)

c++ opencv orientation angle
3个回答
0
投票

似乎我在OpenCV中找不到一个可以解决这个问题的函数。但是,唯一剩下的就是使用循环并应用 if (angle>180) { angle = angle-360; }


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

0
投票

刚刚在OpenCV 3.4中遇到了同样的问题,并想知道为什么返回的角度与使用标准C函数atan2()获得的角度不同。

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

© www.soinside.com 2019 - 2024. All rights reserved.