美文网首页
C#:轮廓面积周长

C#:轮廓面积周长

作者: 大龙10 | 来源:发表于2023-12-09 14:46 被阅读0次

一、程序

        private void uiButton11_Click(object sender, EventArgs e)
        {
            Mat src = src_img.Clone();
            // 如果背景色是白色,则需要进行此操作。即黑色变白色,白色变黑色。
            // 按位运算
            // opencv非运算不是1变0,0变1。而是 !x = 255 - x
            Cv2.BitwiseNot(src, src);
            // 高斯模糊
            Mat blur = new Mat();
            Cv2.GaussianBlur(src, blur, new OpenCvSharp.Size(15, 15), 0, 0);
            //Cv2.ImShow("滤波", blur);
            // 二值化
            Mat grayImg = new Mat();
            Mat binary = new Mat();
            Cv2.CvtColor(blur, grayImg, ColorConversionCodes.BGR2GRAY);
            Cv2.Threshold(grayImg, binary, 0, 255, ThresholdTypes.Binary | ThresholdTypes.Triangle);
            //Cv2.ImShow("二值化", binary);
            // 形态学操作
            Mat morphImage = new Mat();
            Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(3, 3), new OpenCvSharp.Point(-1, -1));
            Cv2.MorphologyEx(binary, morphImage, MorphTypes.Close, kernel, new OpenCvSharp.Point(-1, -1), 2);
            //Cv2.ImShow("形态学操作", morphImage);
            OpenCvSharp.Point[][] contours;
            HierarchyIndex[] hierarchies;
            // 寻找轮廓
            Cv2.FindContours(morphImage, out contours, out hierarchies, RetrievalModes.External, ContourApproximationModes.ApproxSimple, new OpenCvSharp.Point());

            Mat dest = Mat.Zeros(src.Size(), MatType.CV_8UC3);
            for (int i = 0; i < contours.Length; i++)
            {
                double area = Cv2.ContourArea(contours[i]);
                double len = Cv2.ArcLength(contours[i], true);
                Cv2.DrawContours(dest, contours, (int)i, new Scalar(0, 0, 255), 1, LineTypes.Link8, hierarchies);
                Cv2.PutText(dest, "area:" + area.ToString(""), new OpenCvSharp.Point(20, 50), HersheyFonts.HersheySimplex, 1, new Scalar(0, 255, 255), 1, LineTypes.Link4);
                Cv2.PutText(dest, "length:" + len.ToString("0.00"), new OpenCvSharp.Point(20, 150), HersheyFonts.HersheySimplex, 1, new Scalar(0, 255, 255), 1, LineTypes.Link4);
            }        
            pictureBox1.Image = dest.ToBitmap();
        }
    }

二、结果

运行结果

三、资料

蒋智昊的博客
http://chanpinxue.cn/archives/5181.html

相关文章

  • OpenCV-Python学习(十五):轮廓

    ...待更新...目录: 1.轮廓查找与绘制 2.面积,周长,重心 3.轮廓近似: approxPolyDP() ...

  • 轮廓特征之矩、面积、周长

    轮廓特征 查找轮廓的不同特征,例如矩、面积、周长等。 图像矩原始矩对于二维连续函数阶的矩被定义为图像矩对于=0,1...

  • 数学课

    一、复习导入 计算画的周长和面积 交流 复习周长面积公式 正方形 反馈 说说周长和面积的区别 板书:计算公式 单位...

  • 周长、面积、体积

    线段是有长有短的,长度就是线段长短的一种表达。对于长短的认知,是人与生俱来的技能。换言之,不需要去教学什么叫做长度...

  • 三年级的面积与周长

    三年级学面积和周长容易混 三下终于学到面积了。孩子已经把面积和上学期的周长混到一起了。 求周长,5×2=10是面积...

  • 11-24反思

    《圆》这一单元又是本册的一个难点,特别是学习了圆的周长及面积推导之后,娃子们又陷入了面积算成周长、周长算成面积了;...

  • 3.1(圆的面积和周长)

    题目 计算半径为5的圆的面积和周长并打印出来。(pi=3.14)面积(pirr)perimeter(周长)、 代码...

  • 一道六年级看图求周长和面积的问题。

    如下图所示,求图形的周长和面积。 解:关键知道这个图形是求1/4圆环的周长和面积。 ①求周长: 6一2=4(Cm)...

  • C#第三次作业

    作业要求: 计算半径为5的圆的面积和周长并打印出来.(pi为3.14)面积:pirr; Perimeter(周长)...

  • 第三节课作业第一题

    作业要求:计算半径为5的圆的面积和周长并打印出来.(pi为3.14)面积:pirr; Perimeter(周长) ...

网友评论

      本文标题:C#:轮廓面积周长

      本文链接:https://www.haomeiwen.com/subject/nibdgdtx.html