OpenCVSharp 边缘亚像素提取

亚像素提取博文

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCVsharp提取波浪线可以通过以下步骤实现: 1. 读取图像并转为灰度图像。 2. 应用高斯滤波器以平滑图像。 3. 应用Canny边缘检测器以检测边缘。 4. 应用霍夫变换以检测曲线。 5. 选择波浪线曲线并绘制。 下面是一份示例代码: ```csharp using OpenCvSharp; class Program { static void Main(string[] args) { // 读取图像并转为灰度图像 Mat img = Cv2.ImRead("image.png", ImreadModes.Grayscale); // 应用高斯滤波器以平滑图像 Cv2.GaussianBlur(img, img, new Size(5, 5), 0); // 应用Canny边缘检测器以检测边缘 Cv2.Canny(img, img, 100, 200); // 应用霍夫变换以检测曲线 LineSegmentPoint[] lines = Cv2.HoughLinesP(img, 1, Math.PI / 180, 50, 50, 10); // 选择波浪线曲线并绘制 foreach (LineSegmentPoint line in lines) { if (IsWaveLine(line)) { Cv2.Line(img, line.P1, line.P2, Scalar.Red, 2); } } // 显示图像 Cv2.ImShow("Image", img); Cv2.WaitKey(); } static bool IsWaveLine(LineSegmentPoint line) { // 判断线段是否水平 if (Math.Abs(line.P1.Y - line.P2.Y) > Math.Abs(line.P1.X - line.P2.X)) { return false; } // 判断线段是否波浪线 for (int i = line.P1.X + 10; i < line.P2.X - 10; i += 20) { int y = (int)Math.Round((double)(i - line.P1.X) * (line.P2.Y - line.P1.Y) / (line.P2.X - line.P1.X) + line.P1.Y); if (Math.Abs(img.At<byte>(y, i) - img.At<byte>(y + 10, i + 10)) > 30) { return false; } } return true; } } ``` 在上面的示例代码中,函数`IsWaveLine`用于判断线段是否为波浪线,这里的判断方法是检查线段上的每个像素点的灰度值是否相差较小,如相差较大则判定不是波浪线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值