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