


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);
}
}
}