OpenCVSharp - 腐蚀与膨胀

本文档展示了如何使用OpenCVSharp库进行图像处理,特别关注腐蚀和膨胀操作。通过创建Trackbar并调用Erode()和Dilate()函数,实现了对输入图像的实时腐蚀和膨胀效果调整,同时提供了结构元素的选择,如矩形、交叉和椭圆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

腐蚀与膨胀

OpenCV教程链接:https://docs.opencv.org/4.5.0/db/df6/tutorial_erosion_dilatation.html

核心函数:

  • Erode()
  • Dilate()
using OpenCvSharp;
using System;

namespace ConsoleApp1
{
    class tutorial4 : ITutorial
    {

        Mat src, erosion_dst, dilation_dst;
        int erosion_elem = 0;
        int erosion_size = 0;
        int dilation_elem = 0;
        int dilation_size = 0;
        int max_elem = 2;
        int max_kernel_size = 21;

        //TrackbarCallbackNative 本质为 delegate
        /* public delegate void TrackbarCallbackNative(	int pos,	IntPtr userData)*/
    

        public void Run()
        {
            src = Cv2.ImRead("LinuxLogo.jpg", ImreadModes.Color);
            if (src.Empty())
            {
                Console.WriteLine("Could not open or find the image!");
                return;
            }

            erosion_dst = new Mat();
            dilation_dst = new Mat();

            Cv2.NamedWindow("Erosion Demo",WindowFlags.Normal);
            Cv2.NamedWindow("Dilation Demo", WindowFlags.Normal);
            Cv2.MoveWindow("Dilation Demo", src.Cols, 0);

            Cv2.CreateTrackbar("Element", "Erosion Demo",
                ref erosion_elem, max_elem,
                new TrackbarCallbackNative(Erosion));
            Cv2.CreateTrackbar("Kernel size:", "Erosion Demo",
                ref erosion_size, max_kernel_size,
                Erosion);
            Cv2.CreateTrackbar("Element", "Dilation Demo",
                    ref dilation_elem, max_elem,
                   new TrackbarCallbackNative( Dilation));
            Cv2.CreateTrackbar("Kernel size", "Dilation Demo",
                    ref dilation_size, max_kernel_size,
                   new TrackbarCallbackNative( Dilation));
            Erosion(0, IntPtr.Zero );
            Dilation(0, IntPtr.Zero);
            Cv2.WaitKey(0);
        }

        private void Erosion(int erosion_elem, IntPtr userData)
        {
            MorphShapes erosion_type = 0;

            if (erosion_elem == 0) 
            { 
                erosion_type = MorphShapes.Rect; 
            }
            else if (erosion_elem == 1) 
            { 
                erosion_type = MorphShapes.Cross; 
            }
            else if (erosion_elem == 2) 
            { 
                erosion_type = MorphShapes.Ellipse; 
            }
            Mat element = Cv2.GetStructuringElement(erosion_type,
                                 new Size(2 * erosion_size + 1, 2 * erosion_size + 1),
                                 new Point(erosion_size, erosion_size));
            Cv2.Erode(src, erosion_dst, element);
            Cv2.ImShow("Erosion Demo", erosion_dst);
        }

        private void Dilation(int erosion_elem, IntPtr userData)
        {
            MorphShapes dilation_type = 0;
            if (dilation_elem == 0) 
            { 
                dilation_type = MorphShapes.Rect;
            }
            else if (dilation_elem == 1) { dilation_type = MorphShapes.Cross; }
            else if (dilation_elem == 2) { dilation_type = MorphShapes.Ellipse; }
            Mat element = Cv2.GetStructuringElement(dilation_type,
                                 new Size (2 * dilation_size + 1, 2 * dilation_size + 1),
                                 new Point(dilation_size, dilation_size));
            Cv2.Dilate(src, dilation_dst, element);
            Cv2.ImShow("Dilation Demo", dilation_dst);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值