3

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

我创建了一个项目,在其中向我的相机展示了一个矩形区域(调用squared_surface)。这个区域是通过用opencv 文件findSquare ()和跟踪一个矩形来识别的。在这个矩形上,我创建了一个 ROI,并在那里复制了一个图像(我们称之为copyed_image)drawSquares ()squares.cpp

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

我想我需要使用 和 的功能getPerpective () warpPerspective ()但我不知道如何。谁能帮我?

这是代码:

int main(){
 vector<vector<Point> > squares;

 cv::VideoCapture cap(0);
 for (;;) {
    cv::Mat image;
    cap >> image;
    findSquares(image, squares);
    for (size_t i = 0; i < squares.size(); i++) {
    Rect rectangle = boundingRect(Mat(squares[i]));
                
    if((rectangle.width<=630)&& (rectangle.width >= 420) && (rectangle.height<= 490) &&(rectangle.height >= 250 )) {
        cv::Size dsize = Size(rectangle.width, rectangle.height);
        Mat img1 = imread("scacchiera.jpg");
    cv::resize(img1,img1,dsize,0,0, INTER_LINEAR);
        Rect roi (rectangle.x, rectangle.y,rectangle.width, rectangle.height);
        
    Mat imageRoi(image, roi);
       img1.copyTo(imageRoi);
       }
    } 
  drawSquares(image, squares);
  imshow("camera",image);
  if(waitKey(30) >= 0) break;
}
return 0;
}

在此处输入图像描述 在此处输入图像描述

谢谢!

编辑。 我正在考虑旋转Copied_image,所以它遵循Squared_surface,但我需要计算相机识别的矩形的旋转角度(在上图中以红色绘制)。有没有办法计算这个角度?

或者当我旋转 squared_surface 时,如何使Copied_image跟随Squared_surface

请帮帮我!

4

1 回答 1

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

于 2013-01-22T01:41:27.013 回答