小工具知识网

当前位置: 首页 > 行业知识 > OpenCv案例(九): 基于OpenCvSharp图像分割提取目标区域和定位

行业知识

OpenCv案例(九): 基于OpenCvSharp图像分割提取目标区域和定位

2026-11-01 19:11:48 来源:互联网转载

以下原��中,物体连靠在一起,目的是将其分割开,再提取轮廓和定位

原图: 

 最终效果:

麻烦的地方是,分割开右下角部分,两个连在一起的目标物体,下图所示: 

基本方法:BoxFilter滤波、二值化、轮廓提取,凸包检测,图像的矩

代码如下:

        ///         /// 获取分割点        ///         ///         ///         ///         ///         ///         public List GetSplitPoints(Point[][] contours, List contourCount, int arcLength, int farDistance)        {            #region 凸包检测            List lArc = new List();            //Mat src = srcImage.Clone();            List lpContours = new List();            List hulls = new List();            Point lastP = new Point();            Point firstP = new Point();            Point farLastP = new Point();            List lps = new List();            int dot = 1;            List depth = new List();            for (int i = 0; i  farDistance) //(4500  length)//(rect1.Width > range1 && rect1.Height  1)            {                Cv2.Line(bitwiseMat, lps[0], lps[1], Scalar.Black, 2, LineTypes.Link8);            }            Cv2.ImShow("bitwiseMat2", bitwiseMat);            //轮廓提取               contourCount.Clear();    // 注意:不同大小的图像处理时,需要修改length参数            Point[][] newContours = GetImageContours(bitwiseMat, 550, out contourCount);            List rotatedRects = GetMinRects(newContours, contourCount);            for (int i = 0; i  

灰度图像后图像二值化:

图像取反

 

 绘制轮廓

 凸包检测,查找分割点,下图黄色点标记处即找到的分割点位置

 将找到的分割点在二值化图像中,连接一条线后,重新轮廓识别即可分割

最小轮廓矩形提取和绘制,以及绘制质心位置

 到此,已将连接处分隔开

注意:使用以上方法是需要根据图像大小设置部分参数,例如二值化处理参数、过滤轮廓形状大小,凸包检测点的获取等位置,需要根据实际情况设置参数;

上一篇:万网虚拟空间怎么样?

下一篇:揭秘三字艺术,探寻书写魅力!