很抱歉再次提出相同的问题,但我已经尝试了很多方法,但我仍然无法做我想做的事情,而我甚至不确定它是什么&我单独使用opencv是可能的。 我已经旋转了图像,我想将其复制到另一个图像中。问题在于,无论以何种方式裁剪此旋转图像,它总是复制在第二张图像内,周围没有旋转的方形。如下图所示。(忘记白色部分即可)。我只是想删除条纹部分。 我相信我的问题在于我的ROI,我将图像复制到此ROI是一个矩形而不是RotatedRect。如下面的代码所示。
cv::Rect roi(Pt1.x, Pt1.y, ImageAd.cols, ImageAd.rows);
ImageAd.copyTo(ImageABC(roi));
但是我无法像下面的代码那样使用rotateRect进行复制......
cv::RotatedRect roi(cent, sizeroi, angled);
ImageAd.copyTo(ImageABC(roi));
那么有没有办法在opencv中做我想做的事情? 谢谢!
在使用下面的方法和面具后,我得到了这张图像,看到被roi切断,我用它来说出图像中我要复制旋转图像的位置。基本上现在我已经屏蔽了图像,我该如何选择将这个蒙版图像放到第二张图像中的位置。目前我使用的是矩形,但由于我的图像不再是矩形而是旋转的矩形,因此不能工作。看一下代码,看看我现在是怎么做错的(它会中断,如果我把矩形变大,会抛出异常)。
cv::Rect roi(Pt1.x, Pt1.y, creditcardimg.cols, creditcardimg.rows);
creditcardimg.copyTo(imagetocopyto(roi),mask);
答案 0 :(得分:4)
您可以使用遮罩来复制,而不是ROI,
首先使用旋转的rect创建遮罩。
使用此掩码将源图像复制到目标图像
见下面的C ++代码
您的旋转矩形和我手动计算。
RotatedRect rRect = RotatedRect(Point2f(140,115),Size2f(115,80),192);
使用绘制轮廓创建蒙版。
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 );
最后使用上面的掩码将源复制到目的地。
Mat dst;
src.copyTo(dst,mask);