C# OpenCVSharp 记录 之二 色彩转换、二值化、形态学

1、OpencvSharp 颜色空间转换 Cv2.CvtColor()

CvtColor(),是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间的转换,也可以转换为灰度图像

        1:参数RGB2GRAY是RGB到gray。

        2:参数 GRAY2RGB是gray到RGB。等

         private void CVTColor()
        {
            if (cmBoxCVTColor.Text == "")
            {
                return;
            }
            ColorConversionCodes aaa =              (ColorConversionCodes)Enum.Parse(typeof(ColorConversionCodes), cmBoxCVTColor.Text);
            try
            {
                Cv2.CvtColor(src_img, dst, aaa);   

                //src_img :原图   dst  :输出图    aaa:ColorConversionCodes枚举类型
                picBoxShowDel.Image = dst.ToBitmap();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

        }

 

2、OpencvSharp 二值化 Cv2.Threshold()

Threshold()图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。灰度值0:黑,灰度值255:白

        1:thresh是设定的阈值

        2:maxval是当灰度值大于(或小于)阈值时将该灰度值赋成的值

        3:ThresholdTypes当前二值化的方式

        private void Threshold()
        {
            if (cmBoxThre.Text == "")
            {
                return;
            }
            ThresholdTypes aaa = (ThresholdTypes)Enum.Parse(typeof(ThresholdTypes), cmBoxThre.Text);
            try
            {
                Cv2.Threshold(src_img, dst, tkBarThresh.Value, tkBarMaxValue.Value, aaa);//阈值二值化             //src_img :原图   dst  :输出图    tkBarThresh.Value:阈值  tkBarMaxValue.Value: 超过阈值的设置值   aaa: ThresholdTypes枚举类型
                picBoxShowDel.Image = dst.ToBitmap();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

        }

  

3、OpencvSharp 形态学 膨胀Cv2.Dilate()、腐蚀Cv2.Erode()

Dilate(): 膨胀,通过使用特定的结构元素来扩展图像。

Erode(): 腐蚀,通过使用特定的结构元素来侵蚀图像。

private void Dilate()
        {
            if (cmBoxMorph.Text == "")
            {
                return;
            }

            try
            {
                OpenCvSharp.Point point = new OpenCvSharp.Point(SharpPoint.Value, SharpPoint.Value);
                MorphShapes aaa = (MorphShapes)Enum.Parse(typeof(MorphShapes), cmBoxMorph.Text);
                Mat structuringElement = Cv2.GetStructuringElement(aaa, new OpenCvSharp.Size(tkBarPZFS.Value, tkBarPZFS.Value), point);
             //   1:aaa为MorphShapes shape   结果元素的形状 2:Size ksize  结构元素的大小  为奇数
                           3:Point anchor    结构元素中心点                */
                if (rdBtnPZ.Checked)
                {

                    Cv2.Dilate(src_img, dst, structuringElement, point, DilateCount.Value);  //膨胀
                    /*   参数:1:src_img   源图像
                             2: dst  输出图像
                             3:structuringElement 结构元素,奇数
                             4:point   锚点位置,默认是null
                             5:DilateCount.Value应用膨胀的次数。[默认情况下这是1]      */
                }
                else
                {
                    Cv2.Erode(src_img, dst, structuringElement, point, DilateCount.Value);    //腐蚀
                    /*   1:src_img   源图像
                             2: dst  输出图像
                             3:structuringElement 结构元素,奇数
                             4:point   锚点位置,默认是null
                             5:DilateCount.Value应用膨胀的次数。[默认情况下这是1]  */
                }
                picBoxShowDel.Image = dst.ToBitmap();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);

            }

        }

  

4、OpencvSharp 形态学 开运算、闭运算、顶帽、黑帽、膨胀、腐蚀..Cv2.MorphologyEx() 

MorphTypes.Erode:腐蚀。

MorphTypes.Dilate:膨胀。

MorphTypes.Open:先腐蚀后膨胀,可以去掉小的对象。

MorphTypes.Close:先膨胀后腐蚀,可以填充图像的噪点。

MorphTypes.TopHat:原图像与开操作之间的差值操作。

MorphTypes.BlackHat:闭操作图像与原图像的差值图像。

MorphTypes.Gradient:内部是膨胀减去腐蚀。

MorphTypes.Gradient:击中击不中变换。(不明白)

private void MorphologyEx()
        {
            if (cmBoxMorphologyEx.Text == "")
            {
                return;
            }
            if (cmBoxMorphType.Text == "")
            {
                return;
            }
            MorphShapes aaa = (MorphShapes)Enum.Parse(typeof(MorphShapes), cmBoxMorphologyEx.Text);
            MorphTypes bbb = (MorphTypes)Enum.Parse(typeof(MorphTypes), cmBoxMorphType.Text);
            OpenCvSharp.Point point = new OpenCvSharp.Point(SharpPoint.Value, SharpPoint.Value);
            try
            {
                InputArray kernel = Cv2.GetStructuringElement(aaa, new OpenCvSharp.Size(tkBarMorphology.Value, tkBarMorphology.Value), point);   //结构元素
                /* 参数     1:aaa  MorphShapesshape结果元素  

                                2:Size  结构元素的大小
                                3:point    结构元素的锚点(中心点) */
                Cv2.MorphologyEx(src_img, dst, bbb, kernel, point, MorpholoCount.Value); //形态学运算
                /* 参数     1:src_img源图像  2:dst输出图像  3:bbb形态操作类型   4:kernel结构数组   5:point锚点位置(中心点)  6:MorpholoCount.Value 应用腐蚀和膨胀的次数。[默认情况下这是1]          7:borderType  边缘处理方法   */
                picBoxShowDel.Image = dst.ToBitmap();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);

            }

        }

源程序链接:https://download.csdn.net/download/xaiqpl/20097067

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,使用OpenCVSharp库进行图像处理,特别是灰度形态学滤波(Grayscale Morphological Filtering)是非常常见的。形态学滤波主要用于去除噪声、连接断裂的线条或填充孔洞等,通常分为两个主要步骤:结构元素和操作。 1. **结构元素**:这是形态学操作的基础,通常是像矩形、十字或椭圆这样的简单形状,但也可以自定义。OpenCVSharp提供了一些预定义的结构元素类型,如`MorphologyExStructuringElement.ElementShape.Rect`或`MorphologyExStructuringElement.ElementShape.Ellipse`。 2. **基本操作**: - **腐蚀(Erosion)**:通过将结构元素在图像上滑动并移除每个位置与结构元素中心点相交区域的像素值,从而缩小物体边缘。 - **膨胀(Dilation)**:相反的过程,结构元素填充像素使得边缘向外扩展。 - **开运算(Opening)**:先腐蚀后膨胀,用于去除小的噪声点。 - **闭运算(Closing)**:先膨胀后腐蚀,常用于填补小的空洞。 - **顶帽(Top Hat)**:原图减去腐蚀的结果,突出高亮细节。 - **黑帽(Black Hat)**:腐蚀后的图像减去原图,突出低对比度区域。 3. **形态学链**:有时候可能需要执行一系列连续的形态学操作,比如先用开运算消除噪声,然后用闭运算恢复边缘完整性。 在实际代码中,你可以这样使用: ```csharp using Emgu.CV; using Emgu.CV.Structure; // 加载图片 Image<Gray, byte> src = new Image<Gray, byte>("path_to_your_image.jpg"); // 定义结构元素 Mat kernel = MatOfByte.Create(3, 3, (byte[,])new[,] { {0, 1, 0}, {1, 1, 1}, {0, 1, 0} }); // 矩形结构 // 应用腐蚀操作 Image<Gray, byte> erosion = src.MorphologyEx(kernel, Emgu.CV.CvEnum.MORPHOPS.CV_ERODE); // 类似地,为其他操作替换参数 var dilationKernel = ...; // 填充空洞 erosion = erosion.MorphologyEx(dilationKernel, Emgu.CV.CvEnum.MORPHOPS.CV_DILATE); ``` 如果你想要了解更多关于OpenCVSharpC#中的应用,相关问题可以包括:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值