我有一张图片,并知道该图片的四个坐标,现在我只想将另一张小图片放在由这四个点形成的轮廓上。这个轮廓几乎是一个正方形。 有没有办法用图片填充这个轮廓?
我尝试创建一个矩形,但我无法使用多个点创建一个矩形。 我陷入了困境。找不到任何解决方案。
我有一张图片,并知道该图片的四个坐标,现在我只想将另一张小图片放在由这四个点形成的轮廓上。这个轮廓几乎是一个正方形。 有没有办法用图片填充这个轮廓?
我尝试创建一个矩形,但我无法使用多个点创建一个矩形。 我陷入了困境。找不到任何解决方案。
img
)变形成放在另一张图片(我们称之为canvas
)上的四边形。换句话说,你基本上想做到这样:
首先,你需要找到矩阵变换T
来描述原始矩形图片(img
)和目标四边形(我们称之为warpedImg
)之间的关系:cv::Mat T = getPerspectiveTransform(imgCorners, // std::vector<cv::Point2f> that contains img's vertices -- i.e. (0, 0) (0,img.rows) (img.cols, img.rows) (img.cols, 0)
warpedCorners); // std::vector<cv::Point2f> that contains warpedImg's vertices
接下来,您可以使用T
从img
生成warpedImg
:
cv::Mat warpedImg;
cv::warpPerspective(img, warpedImg, T, canvas.size());
cv::fillConvexPoly(canvas, warpedCorners, cv::Scalar::all(0), CV_AA);
cv::bitwise_or(warpedImg, canvas, canvas);
就是这样!