我使用OpenCV库(Win7 x64和Visual Studio 2010)。
我的工作在于检测经常旋转的矩形。
为了检测矩形,我使用OpenCv的squares.cpp
,而不是使用findSquares()
返回的点以这种方式创建RotatedRect:
for (size_t i = 0; i <squares.size(); i++) {
RotatedRect box= cv::minAreaRect(Mat(squares[i]));
其中squares
是findSquares()
返回的 vector 。现在我的问题是:当我在终端上打印
box.angle
时,我看到一个奇怪的行为。在这张图片中box.angle
是正确的(大约为0°)。但是,当我稍微改变我的相机位置时,
box.angle
变为-88°左右,如您在第二幅图像中所见:我不明白为什么!
有谁知道为什么这种奇怪的行为???
谢谢!
最佳答案
这取决于您返回方形顶点的顺序。请注意,如果从左下角开始,则 Angular 正确为-0.89º,该 Angular 趋于零。如果返回的第一个顶点在右下角,则您处于-89.1º。与0.89 -90相同。
这仅取决于轮廓点的返回顺序。
因此,请放心,根据轮廓点的顺序,趋向于0,90,180或270的任何结果都是很好的结果。
亲切的问候,大卫
关于opencv - RotatedRect角度-奇怪的行为会稍微改变相机的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14674645/