OpenCv案例(六):基于OpenCvSharp工业零件缺陷检测

1:需求:某工厂自动化流水线上,检测工站对零件涂胶的工艺是否正常;

2:先看原图,如下所示:

3:需要对图中白色涂胶部分进行检测,检测涂胶是否有断开现象,若有,则为NG,涂胶不合格。(下图箭头指示部分,即是涂胶)

 

 4:处理中几个过程图像如下所示:

        模糊处理-降噪

        图像二值化 

        轮廓提取 

 

         上图可以看出,涂胶没有断开,为合格件。

 5:代码部分如下

public bool ImgProcess(Mat src)
        {
            bool result = false;
            //图像灰度
            Mat matGray = new Mat();
            Cv2.CvtColor(src, matGray, ColorConversionCodes.BGR2GRAY);
            Cv2.ImShow("matGray", matGray);

            Mat BlurMat = new Mat();
            Cv2.MedianBlur(matGray, BlurMat, 5);
            //Cv2.GaussianBlur(matGray, BlurMat, new Size(3, 3), 15, 0, BorderTypes.Default);
            //Cv2.ImShow("MedianBlur", BlurMat);
            //Cv2.Blur(matGray, BlurMat,new Size(5,5));
            Mat bilateralFilter = new Mat();
            Cv2.BilateralFilter(BlurMat, bilateralFilter, 9, 25, 25);

            Mat BlurMat1 = new Mat();
            Cv2.FastNlMeansDenoising(bilateralFilter, BlurMat1, 9);
            Cv2.ImShow("BlurMat1", BlurMat1);


            //binaryImage
            Mat binaryImg = new Mat();
            Cv2.Threshold(BlurMat1, binaryImg, 210, 255, ThresholdTypes.Binary);
            Cv2.ImShow("binary", binaryImg);


            Mat morhpImage = new Mat();
            Mat kernel = Cv2.GetStructuringElement(MorphShapes.Ellipse, new Size(3,3), new Point(-1, -1));
            开操作 先腐蚀 后膨胀
            Cv2.MorphologyEx(binaryImg, morhpImage, MorphTypes.Erode, kernel, new Point(-1, -1),1);
            Cv2.ImShow("Open", morhpImage);


            Mat laplanceMat = new Mat();
            Cv2.Laplacian(morhpImage, laplanceMat, MatType.CV_8UC1, 3, 3, 5);
            Cv2.ImShow("Laplacian", laplanceMat);



            //连通区域计算
            Point[][] contours;
            HierarchyIndex[] hierarchies;
            Cv2.FindContours(laplanceMat, out contours, out hierarchies, RetrievalModes.Tree, ContourApproximationModes.ApproxSimple);

            //绘制结果图像
            Mat markRet = Mat.Zeros(src.Size(), MatType.CV_8UC3);
            RNG rng = new RNG(12345);
            double maxArea = 0;
            int index = -1;
            for (int i = 0; i < contours.Length; i++)
            {
                //面积过滤
                double area = Cv2.ContourArea(contours[i]);
                double length = Cv2.ArcLength(contours[i], false);
                if (area > maxArea)
                {
                    maxArea = area;
                    index = i;
                }
                if (length > 500 && length < 1000)
                {
                    Cv2.DrawContours(markRet, contours, i, new Scalar(rng.Uniform(0, 255), rng.Uniform(0, 255), rng.Uniform(0, 255)), 6, LineTypes.Link4);
                }
            }

            Cv2.ImShow("dist-Binary", markRet);
            return result;
        }

 6:以上是对该操作的介绍,若对其中某些算法不明白,可以关键字搜索其算法原理,对其进行调参,这里不做过多介绍。补充一点,上述方法,可适当调节参数,可扩大该方法通用性,欢迎各位伙伴补充交流;

  • 4
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
缺陷检测是指通过图像处理和分析技术来检测物体表面的缺陷或异常。在C#中,可以使用OpenCvSharp库来实现缺陷检测。引用\[1\]中的博客文章介绍了如何使用OpenCvSharp实现瓶口缺陷检测。该文章提供了详细的步骤和代码示例,包括图像预处理、差分图像计算、阈值化、轮廓查找和标注等。你可以参考该文章来了解如何在C#中使用OpenCvSharp进行缺陷检测。引用\[2\]中的博客文章介绍了如何使用OpenCvSharp和OCR技术实现环形文字识别。该文章提供了详细的步骤和代码示例,包括图像预处理、文字转换到水平方向、OCR识别等。你可以参考该文章来了解如何在C#中使用OpenCvSharp进行环形文字识别。引用\[3\]中的代码片段展示了使用OpenCvSharp进行缺陷检测的一部分代码,包括图像灰度化、模糊处理、差分图像计算、阈值化、轮廓查找和标注等。你可以根据自己的需求和具体情况,结合这些代码来实现缺陷检测。 #### 引用[.reference_title] - *1* *2* *3* [Halcon实例OpenCvSharp(C# OpenCV)实现--瓶口缺陷检测(附源码)](https://blog.csdn.net/stq054188/article/details/125623076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值