我使用opencv和Visual Studio 2010在c ++语言上使用Windows7 x64。
我创建了一个项目,在其中我向相机显示一个矩形区域(调用 squared_surface )。通过使用opencv文件findSquare ()
的{{1}}和drawSquares ()
跟踪矩形来识别此区域。
在这个矩形上,我创建了一个ROI,在那里我复制了一个图像(让我们调用 copied_image)
我的问题是,当我旋转 squared_surface (在相机前)时, copied_image 不会跟随它
我想我需要使用函数squares.cpp
和getPerpective ()
,但我不知道如何。任何人都可以帮助我吗?
以下是代码:
warpPerspective ()
谢谢!
修改 我想要旋转 Copied_image ,所以它跟随 Squared_surface ,但是我需要计算相机识别的矩形的旋转角度(在上面的图像中用红色绘制) )。有没有办法计算这个角度?
或者,当我旋转squared_surface时,我怎么能这样做 Copied_image 跟在 Squared_surface 之后?
请帮帮我!
答案 0 :(得分:2)
我想我发现了这个错误。 Rect rectangle = boundingRect(Mat(squares[i]));
这就是问题所在。您正在创建变量rectangle
作为squares[i]
中坐标的边界矩形。所以你的代码总是试图找出边界矩形,而不是实际的矩形。
尝试使用旋转的矩形,而不是使用边界矩形。以下是如何使用它:http://www710.univ-lyon1.fr/~eguillou/documentation/opencv2/classcv_1_1_rotated_rect.html
旋转的矩形RotatedRect (const Point2f &_center, const Size2f &_size, float _angle)
需要中心点位置,浮点角度和大小。由于您拥有所有坐标,我认为您可以使用基本数学和三角学来计算矩形应如何旋转/定向的中心和角度。
如果这有帮助,请告诉我。