我在 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?
请帮帮我!