c# OpenCvSharp 边缘检测 Sobel 算子

c# OpenCvSharp 边缘检测 Sobel 算子

 

using OpenCvSharp;
using OpenCvSharp.Extensions;
using DlibDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace app
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Sobel算子
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSobel_Click(object sender, EventArgs e)
        {
            // 加载图像
            Mat src = Cv2.ImRead(@"img\star.png", ImreadModes.Grayscale);
            Cv2.ImShow("原图", src);

            /*
            dst 代表目标图像。
            src 代表原始图像。
            ddepth 代表输出图像的深度。
            dx 代表 x 方向上的求导阶数。
            dy 代表 y 方向上的求导阶数。
            ksize 代表 Sobel 核的大小。该值为 - 1 时,则会使用 Scharr 算子进行运算。
            scale 代表计算导数值时所采用的缩放因子,默认情况下该值是 1,是没有缩放的。
            delta 代表加在目标图像 dst 上的值,该值是可选的,默认为 0。
            borderType 代表边界样式。
            */

            Mat sobelX = new Mat();
            Cv2.Sobel(src, sobelX, MatType.CV_8U, 1, 0, 3, 0.4, 128);
            Cv2.ImShow("Sobel算子 X", sobelX);

            Mat sobelY = new Mat();
            Cv2.Sobel(src, sobelY, MatType.CV_8U, 0, 1, 3, 0.4, 128);
            Cv2.ImShow("Sobel算子 Y", sobelY);

            // 水平、垂直两个方向叠加的边缘信息
            Mat sobelXY = new Mat();
            Cv2.AddWeighted(sobelX, 0.5, sobelY, 0.5, 0, sobelXY);
            Cv2.ImShow("Sobel算子 X + Y", sobelXY);
        }

    }
}

 

发表回复

您的电子邮箱地址不会被公开。