【问题标题】:Warp an image into a quad region of another image using OpenCV使用 OpenCV 将图像变形为另一个图像的四边形区域
【发布时间】:2015-12-12 02:18:29
【问题描述】:

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

我尝试创建一个矩形,但无法使用多个点创建一个矩形。 我被困住了。找不到任何解决方案。

【问题讨论】:

    标签: c++ opencv visual-studio-2012 contour


    【解决方案1】:

    我假设您想将图像(我们称之为 img)“变形”为放置在另一个图像中的四边形(我们称之为 canvas)——也就是说,您基本上想要这样做:

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

    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
    

    然后,您可以使用Timg 生成warpedImg

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

    最后,要将warpedImg“粘贴”到canvas,您可以先“屏蔽”canvas 中的四边形区域:

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

    然后应用“或”运算:

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

    就是这样!

    【讨论】:

    • 你先生太棒了。我完全理解这个概念,它就像一个魅力。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2016-11-11
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多