Opencv中文网

四点透视矫正(GetPerspectiveTransform + WarpPerspective)

组合算法:GetPerspectiveTransform + WarpPerspective

参数

  • srcPoints:原图 4 个倾斜角点(顺序:左上→右上→右下→左下)
  • dstPoints:目标标准矩形 4 个点

作用

把倾斜、畸变的四边形画面拉直为标准矩形。

使用场景

文档矫正、卡片摆正、托盘工件透视畸变校正。

public override Mat Execute(Mat src)
{
    Mat result = src.Clone();
    InputMat= src.Clone();
    try
    {
        result = DoPerspectiveCorrection(src);
        Success = true;
        Message = "透视矫正完成";
    }
    catch (Exception ex)
    {
        Message = $"矫正失败:{ex.Message}";
        Success = false;
    }

    return result;
}
/// <summary>
/// 执行透视矫正核心逻辑
/// </summary>
private Mat DoPerspectiveCorrection(Mat src)
{
    // 1. 转换源点为 OpenCV 格式
    Point2f[] srcPoints = SourcePoints.Select(p => new Point2f((float)p.X, (float)p.Y)).ToArray();

    // 2. 定义目标点(规则矩形的四个角)
    Point2f[] dstPoints = new[]
    {
        new Point2f(0, 0),
        new Point2f(TargetWidth - 1, 0),
        new Point2f(TargetWidth - 1, TargetHeight - 1),
        new Point2f(0, TargetHeight - 1)
    };

    // 3. 计算透视变换矩阵
    Mat M = Cv2.GetPerspectiveTransform(srcPoints, dstPoints);

    // 4. 执行透视变换(双线性插值,保证图像质量)
    Mat dst = new Mat();
    Cv2.WarpPerspective(src, dst, M, new Size(TargetWidth, TargetHeight),
        InterpolationFlags.Linear, BorderTypes.Constant, Scalar.Black);

    M.Dispose();
    return dst;
}

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1