好的,很抱歉再次提出几乎相同的问题,但我已经尝试了很多方法,但我仍然无法做我想做的事情,我什至不确定单独使用 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)


您可以使用掩码来复制,而不是 ROI,
首先使用旋转矩形创建蒙版。
使用此蒙版将源图像复制到目标图像
见下面的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)

| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |