gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:46:49 27 4
gpt4 key购买 nike

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

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

我的问题是,当我旋转 squared_surface(在镜头前)时,copied_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;
}

enter image description here enter image description here

谢谢!

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

或者当我旋转 squared_surface 时,我怎样才能让 Copied_image 跟随 Squared_surface

请帮帮我!

最佳答案

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

关于c++ - 在 ROI 中复制的图像不遵循相机 C++。如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com