[英]Is it possible to copy a rotated image into a rotatedrect ROI of another image with opencv?
好的,很抱歉再次询问几乎相同的问题,但是我尝试了很多方法,但是我仍然无法做我想做的事情,而且我甚至不确定单独使用opencv是否有可能。 我已经旋转了一张图片,并且想要将其复制到另一张图片中。 问题是,无论我以何种方式裁剪此旋转图像,它都始终在第二个图像内复制,并且周围没有旋转正方形。 如下图所示(忘了白色部分没关系)。 我只想删除条纹部分。 我相信我的问题是我将图像复制到的ROI,因为该ROI是rect而不是RotatedRect。 如下面的代码所示。
cv::Rect roi(Pt1.x, Pt1.y, ImageAd.cols, ImageAd.rows);
ImageAd.copyTo(ImageABC(roi));
但是我不能像下面的代码那样使用rotatedRect进行复制到...
cv::RotatedRect roi(cent, sizeroi, angled);
ImageAd.copyTo(ImageABC(roi));
那么在opencv中有什么方法可以做我想要的吗? 谢谢!
在将下面的方法与蒙版一起使用之后,我得到了该图像,该图像被roi剪切掉了,在该图像中我曾经说过要在图像中复制旋转的图像。 基本上,既然我已经屏蔽了图像,那么如何选择将屏蔽后的图像放入第二个图像的位置。 目前,我使用的是rect,但是由于我的图像不再是rect,而是旋转的rect,因此无法使用。 查看代码,看看我现在是怎么做的(它切断了,如果我使rect变大,则会引发异常)。
cv::Rect roi(Pt1.x, Pt1.y, creditcardimg.cols, creditcardimg.rows);
creditcardimg.copyTo(imagetocopyto(roi),mask);
您可以使用蒙版进行复制,而不是使用ROI,
首先使用旋转矩形创建蒙版。
使用此蒙版将源图像复制到目标图像
参见下面的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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.