组合算法: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;
}
若文章对您有帮助,可以激励一下我哦,祝您平安幸福!
| 微信 | 支付宝 |
|---|---|
![]() |
![]() |

