在ROI中复制的图像不遵循相机c ++。如何解决这个问题?

时间:2013-01-20 22:33:31

标签: c++ opencv rotation rectangles roi

我使用opencv和Visual Studio 2010在c ++语言上使用Windows7 x64。

我创建了一个项目,在其中我向相机显示一个矩形区域(调用 squared_surface )。通过使用opencv文件findSquare ()的{​​{1}}和drawSquares ()跟踪矩形来识别此区域。 在这个矩形上,我创建了一个ROI,在那里我复制了一个图像(让我们调用 copied_image)

我的问题是,当我旋转 squared_surface (在相机前)时, copied_image 不会跟随它

我想我需要使用函数squares.cppgetPerpective (),但我不知道如何。任何人都可以帮助我吗?

以下是代码:

warpPerspective ()

enter image description here enter image description here

谢谢!

修改 我想要旋转 Copied_image ,所以它跟随 Squared_surface ,但是我需要计算相机识别的矩形的旋转角度(在上面的图像中用红色绘制) )。有没有办法计算这个角度?

或者,当我旋转squared_surface时,我怎么能这样做 Copied_image 跟在 Squared_surface 之后?

请帮帮我!

1 个答案:

答案 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)需要中心点位置,浮点角度和大小。由于您拥有所有坐标,我认为您可以使用基本数学和三角学来计算矩形应如何旋转/定向的中心和角度。 如果这有帮助,请告诉我。