c# OpenCvSharp透视矫正六步实现透视矫正(八)

本文详细介绍了如何在C#中使用OpenCVSharp进行图像处理,包括读取图像、灰度化、高斯滤波、边缘检测、轮廓检测,最终实现对图像进行透视矫正的过程。

透视矫正,引用文档拍照扫描,相片矫正这块。

  1. 读取图像Cv2.ImRead();
  2. 预处理(灰度化,高斯滤波、边缘检测)
  3. 轮廓检测(获取到最大轮廓)
  4. 获取最大面积轮廓的四个顶点
  5. 标识最小矩形坐标
  6. 透视矫正显示

完整代码

 // 1、读取图像
 Mat image = Cv2.ImRead("2.jpg", ImreadModes.Color);

 //2、预处理(灰度化,高斯滤波、边缘检测)

 Mat src_gray = new Mat();
 Cv2.CvtColor(image, src_gray, ColorConversionCodes.BGR2GRAY); // 转换为灰度图像
 Cv2.GaussianBlur(src_gray, src_gray, new Size(5, 5), 0, 0); // 进行高斯模糊
 Mat canny_Image = new Mat();
 Cv2.Canny(src_gray, canny_Image, 75, 200);

 //3、轮廓检测
 Point[][] contours;
 HierarchyIndex[] hierarchy;
 Cv2.FindContours(canny_Image, out contours, out hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxSimple);
 
 // 计算轮廓的面积
 double maxArea = 0;
 int maxAreaIndex = -1;
 for (int i = 0; i < contours.Length; i++)
 {
     double area = Cv2.ContourArea(contours[i]);
     if (area > maxArea)
     {
         maxArea = area;
         maxAreaIndex = i;
     }
 }

 // 获取最大面积的轮廓
 Point[] largestContour = contours[maxAreaIndex];
 //4、获取最大面积轮廓的四个顶点。
 Point[] approx = Cv2.ApproxPolyDP(contours[maxAreaIndex], 0.02 * Cv2.ArcLength(contours[maxAreaIndex], true), true);
 Cv2.DrawContours(image, new Point[][] { approx }, -1, Scalar.Blue, 2);

 //可以注释掉
 for (int i = 0; i < 4; i++)
 {
      // 设置目标图像的四个顶点坐标
    //Cv2.PutText(image, "H"+i, new Point(approx[i].X, approx[i].Y), HersheyFonts.HersheySimplex, 1, new Scalar(0, 0, 255), 2, LineTypes.Link4);
 }
 //5、透视转换
 OpenCvSharp.Point2f[] srcPt = new OpenCvSharp.Point2f[4];
 srcPt[0] = approx[0];
 srcPt[1] = approx[3];
 srcPt[2] = approx[2];
 srcPt[3] = approx[1];

 RotatedRect rect = Cv2.MinAreaRect(srcPt);
 Rect box = rect.BoundingRect(
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值