C# OpenCVSharp 记录 之四 透视变换Cv2.WarpPerspective()

1、OpencvSharp 透视变换Cv2.WarpPerspective()

WarpPerspective()透视变换是将图片投影到一个新的视平面,也称作投影映射透视变换不能保证物体形状的“平行性”。

 private void WarpPerspective()
        {
            var srcPoints = new Point2f[]       //指定变换前的四角点 //手工测量的坐标位置,实际使用中可以通过鼠标获取
            {
                new Point2f(Points[0].X,Points[0].Y),
                new Point2f(Points[1].X,Points[1].Y),
                new Point2f(Points[3].X,Points[3].Y),
                new Point2f(Points[2].X,Points[2].Y),
                //new Point2f(0,0),
                //new Point2f(src_img.Width-1,0),
                //new Point2f(0,src_img.Height-1),
                //new Point2f(src_img.Width-1,src_img.Height-1),
            };
            int x = Math.Abs(Points[0].X - Points[1].X);
            int y = Math.Abs(Points[0].Y - Points[1].Y);
            int width = (int)Math.Sqrt(x * x + y * y);
            x = Math.Abs(Points[2].X - Points[1].X);
            y = Math.Abs(Points[2].Y - Points[1].Y);
            int height = (int)Math.Sqrt(x * x + y * y);
            //OpenCvSharp.Size size = new OpenCvSharp.Size(width+100,height+100);

            var dstPoints = new Point2f[]        指定变换后的四角点
            {
                new Point2f(Points[3].X,Points[0].Y),
                new Point2f(Points[2].X,Points[0].Y),
                new Point2f(Points[3].X,Points[3].Y),
                new Point2f(Points[2].X,Points[3].Y),
                //new Point2f(0,0),
                //new Point2f(width,0),
                //new Point2f(0,height),
                //new Point2f(width,height),

            };
            try
            {
                Mat TransformMatrix = Cv2.GetPerspectiveTransform(srcPoints, dstPoints);      //根据变换前后四个角点坐标,计算变换矩阵
                Cv2.WarpPerspective(src_img, dst, TransformMatrix, src_img.Size());   //透视变换函数
                picBoxShowDel.Image = dst.ToBitmap();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
           
        }

顺时针依次选择4个点,进行转换:

源程序链接:https://download.csdn.net/download/xaiqpl/20097067

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
透视变换是一种图像处理技术,可以将图像从一个视角转换到另一个视角,以实现拉正视角的效果。在C#中使用OpenCvSharp库可以实现透视变换。 下面是一个示例代码,演示了如何使用OpenCvSharp进行透视变换和拉正视角: ```csharp using OpenCvSharp; // 读取原始图像 Mat srcImg = new Mat("input.jpg", ImreadModes.Color); // 定义原始图像的四个角点 Point2f[] srcPoints = new Point2f[] { new Point2f(0, 0), new Point2f(srcImg.Width, 0), new Point2f(srcImg.Width, srcImg.Height), new Point2f(0, srcImg.Height) }; // 定义目标图像的四个角点 Point2f[] dstPoints = new Point2f[] { new Point2f(0, 0), new Point2f(srcImg.Width, 0), new Point2f(srcImg.Width, srcImg.Height), new Point2f(0, srcImg.Height) }; // 计算透视变换矩阵 Mat perspectiveMatrix = Cv2.GetPerspectiveTransform(srcPoints, dstPoints); // 应用透视变换 Mat dstImg = new Mat(); Cv2.WarpPerspective(srcImg, dstImg, perspectiveMatrix, new Size(srcImg.Width, srcImg.Height)); // 显示结果图像 Cv2.ImShow("Output", dstImg); Cv2.WaitKey(0); Cv2.DestroyAllWindows(); ``` 在上述代码中,我们首先读取了原始图像,然后定义了原始图像的四个角点和目标图像的四个角点。接下来,使用`Cv2.GetPerspectiveTransform`函数计算透视变换矩阵。最后,使用`Cv2.WarpPerspective`函数应用透视变换并得到结果图像。 请注意,上述代码中的`input.jpg`是原始图像的文件路径,你需要将其替换为你自己的图像路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值