是否可以使用 opencv 将旋转图像复制到另一个图像的旋转矩形 ROI 中?

One*_*Two 2 c++ opencv image

好的,很抱歉再次提出几乎相同的问题,但我已经尝试了很多方法,但我仍然无法做我想做的事情,我什至不确定单独使用 opencv 是否可行。我旋转了一个图像,我想将它复制到另一个图像中。问题是,无论我用什么方式裁剪这个旋转的图像,它总是在第二个图像内复制,周围有一个非旋转的正方形。如下图所示。(忘记白色部分没关系)。我只想删除条纹部分。我相信我的问题在于我将图像复制到的 ROI,因为这个 ROI 是一个 rect 而不是 RotatedRect。如下面的代码所示。

cv::Rect roi(Pt1.x, Pt1.y, ImageAd.cols, ImageAd.rows);
ImageAd.copyTo(ImageABC(roi));
Run Code Online (Sandbox Code Playgroud)

但是我不能像下面的代码一样使用旋转的矩形复制到......

cv::RotatedRect roi(cent, sizeroi, angled);
ImageAd.copyTo(ImageABC(roi));
Run Code Online (Sandbox Code Playgroud)

那么有没有办法在opencv中做我想做的事?谢谢!

在此处输入图片说明

在使用下面的方法和蒙版后,我得到了这个图像,它被 roi 截断,我用它来说明我想在图像中的哪个位置复制我的旋转图像。基本上现在我已经屏蔽了图像,我如何选择将此屏蔽图像放入第二张图像的位置。目前我使用 rect 但这不起作用,因为我的图像不再是 rect 而是旋转的 rect。查看代码,看看我现在是如何错误地做的(它会切断,如果我使 rect 更大,则会引发异常)。

cv::Rect roi(Pt1.x, Pt1.y, creditcardimg.cols, creditcardimg.rows); 
        creditcardimg.copyTo(imagetocopyto(roi),mask);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明

Har*_*ris 5

您可以使用掩码来复制,而不是 ROI,

  1. 首先使用旋转矩形创建蒙版。

  2. 使用此蒙版将源图像复制到目标图像

见下面的C++代码

您旋转的矩形,我手动计算。

RotatedRect rRect = RotatedRect(Point2f(140,115),Size2f(115,80),192);
Run Code Online (Sandbox Code Playgroud)

使用绘制轮廓创建蒙版。

   Point2f vertices[4];
   rRect.points(vertices);
   Mat mask(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
   vector< vector<Point> >  co_ordinates;
   co_ordinates.push_back(vector<Point>());
   co_ordinates[0].push_back(vertices[0]);
   co_ordinates[0].push_back(vertices[1]);
   co_ordinates[0].push_back(vertices[2]);
   co_ordinates[0].push_back(vertices[3]);
   drawContours( mask,co_ordinates,0, Scalar(255),CV_FILLED, 8 );
Run Code Online (Sandbox Code Playgroud)

最后使用上面的掩码将源复制到目标。

    Mat dst;
    src.copyTo(dst,mask);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 在此处输入图片说明