OpenCVSharp 4.5 Sobel 算子

OpenCVSharp 4.5 跑一遍OpenCV官方教程(全为手敲代码,如有雷同都是我的错)

OpenCVSharp 4.5 Sobel 算子

OpenCV教程链接:https://docs.opencv.org/4.5.0/d2/d2c/tutorial_sobel_derivatives.html

核心函数: 

using System;
using OpenCvSharp;

namespace ConsoleApp1
{
    class tutorial13 : ITutorial
    {
        public void Run()
        {
            Mat image, src, src_gray;
            Mat grad;
            const String window_name = "Sobel Demo - Simple Edge Detector";
            int ksize = 3; //
            int scale = 1;
            int delta = 0;
            MatType ddepth = MatType.CV_16S;
            String imageName = "I:\\csharp\\images\\lena.jpg";

            image = Cv2.ImRead(imageName, ImreadModes.Color); // Load an image
                                                              // Check if image is loaded fine
            if (image.Empty())
            {
                Console.WriteLine("Error opening image: %s\n", imageName);
                return;
            }
            src = new Mat();
            src_gray = new Mat();
            for (; ; )
            {
                // Remove noise by blurring with a Gaussian filter ( kernel size = 3 )
                Cv2.GaussianBlur(image, src, new Size(3, 3), 0, 0, BorderTypes.Default);
                // Convert the image to grayscale
                Cv2.CvtColor(src, src_gray, ColorConversionCodes.BGR2GRAY);
                Mat grad_x = new Mat();
                Mat grad_y = new Mat();
                Mat abs_grad_x = new Mat();
                Mat abs_grad_y = new Mat();
                Cv2.Sobel(src_gray, grad_x, ddepth, 1, 0, ksize, scale, delta, BorderTypes.Default);
                Cv2.Sobel(src_gray, grad_y, ddepth, 0, 1, ksize, scale, delta, BorderTypes.Default);
                // converting back to CV_8U
                Cv2.ConvertScaleAbs(grad_x, abs_grad_x);
                Cv2.ConvertScaleAbs(grad_y, abs_grad_y);

                grad = new Mat();
                Cv2.AddWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
                Cv2.ImShow(window_name, grad);
                char key = (char)Cv2.WaitKey(0);
                if (key == 27)
                {
                    return;
                }
                if (key == 'k' || key == 'K')
                {
                    ksize = ksize < 30 ? ksize + 2 : -1;
                }
                if (key == 's' || key == 'S')
                {
                    scale++;
                }
                if (key == 'd' || key == 'D')
                {
                    delta++;
                }
                if (key == 'r' || key == 'R')
                {
                    scale = 1;
                    ksize = -1;
                    delta = 0;
                }
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值