当前位置:  开发笔记 > 编程语言 > 正文

使用OpenCV将图像变形为另一图像的四边形区域

如何解决《使用OpenCV将图像变形为另一图像的四边形区域》经验,为你挑选了1个好方法。

我有一个图像,我知道该图像的四个坐标,现在我只想在这四个点形成的轮廓上放置另一个小图像.这个轮廓几乎是一个正方形.有没有办法用图像填充这个轮廓点?

我试图创建一个矩形,但我不能使用多个点创建一个矩形.我被卡住了.找不到任何解决方案.



1> maddouri..:

我假设您想要"扭曲"一个图像(让我们称之为img)放入另一个图像中的四边形(让我们称之为canvas) - 即您基本上想要这样做:

首先,您需要找到T矩形图像(img)和目标四边形之间的变换(矩阵)(让我们称之为warpedImg):

cv::Mat T = getPerspectiveTransform(imgCorners,     // std::vector that contains img's vertices -- i.e. (0, 0) (0,img.rows) (img.cols, img.rows) (img.cols, 0)
                                    warpedCorners); // std::vector that contains warpedImg's vertices

然后,您可以使用T生成warpedImgimg:

cv::Mat warpedImg;
cv::warpPerspective(img, warpedImg, T, canvas.size());

最后,要"粘贴" warpedImgcanvas,您可以先"掩盖"四边形区域canvas:

cv::fillConvexPoly(canvas, warpedCorners, cv::Scalar::all(0), CV_AA);

然后应用"或"操作:

cv::bitwise_or(warpedImg, canvas, canvas);

而已!


你先生很棒.我完全理解这个概念,它就像一个魅力.谢谢.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有