私は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に従うようにするにはどうすればよいですか?
お願い助けて!