3

私はWindows7x64でopencvを使用し、VisualStudio2010をC++言語で使用しています。

カメラに長方形の領域を表示するプロジェクトを作成しました(squared_surfaceと呼びます)。findSquare ()この領域は、drawSquares ()opencvファイルを使用して長方形をトレースすることで認識されますsquares.cpp。この長方形にROIを作成し、そこに画像をコピーします(copyed_imageと呼びましょう)。

私の問題は、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 に答える