OpenCV技巧二值图孔洞填充方法与

北京治白癜风的好医院 https://yyk.39.net/hospital/89ac7_detail.html

点击上方“OpenCV与AI深度学习”,选择加"星标"或“置顶”

重磅干货,第一时间送达

导读本文主要介绍使用OpenCV对二值图做孔洞填充的方法与实现。背景介绍为什么要做孔洞填充?因为在部分情况下,二值图内部的孔洞和外部轮廓是一个整体,填充孔洞可以方便后续处理,减少干扰。

OpenCV孔洞填充的常用方法有2种:

①形态学闭运算。闭运算是先膨胀后腐蚀操作,如上图,先膨胀白色高亮区域增加,孔洞会被填充。但使用闭运算针对不同的图片不能准确知道需要的核大小是多少,所以并不能通用;

②轮廓绘制方法。通过轮廓绘制drawContours函数设置绘制线宽为-1即可填充绘制。但查找轮廓一般是在二值图处理之后才会使用,这样会造成重复操作。

尽量在二值图时完成孔洞填充,不影响后续操作顺序才是最终目标!

实现步骤与代码实现步骤:

①通过二值化或其他方法得到二值图;

②使用floodFill从(0,0)点开始执行漫水填充算法;

③漫水填充结果图取反;

④取反后的结果与二值图求并集。

实现代码与逐步演示:

①得到二值图:

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)_,thres=cv2.threshold(gray,,,cv2.THRESH_BINARY)cv2.imshow("thres",thres)

②执行漫水填充算法:

#执行漫水填充方法.#注意图像大小比原图宽高都大2.h,w=gray.shape[:2]mask=np.zeros((h+2,w+2),np.uint8)#漫水填充从(0,0)点开始cv2.floodFill(im_floodfill,mask,(0,0),)cv2.imshow("im_floodfill",im_floodfill)

③漫水填充图像取反:

#反转漫水填充图像im_floodfill_inv=cv2.bitwise_not(im_floodfill)cv2.imshow("im_floodfill_inv",im_floodfill_inv)

④取反图像与二值图求并集:

#将二值图与上一步图像求并集im_out=thres

im_floodfill_invcv2.imshow("holeFill",im_out

换张图片测试同样可以,此方法具有通用性,可自己封装成函数使用。

参考链接:

转载请注明地址:http://www.1xbbk.net/jwbrc/5.html


  • 上一篇文章:
  • 下一篇文章:
  • 网站简介 广告合作 发布优势 服务条款 隐私保护 网站地图 版权声明
    冀ICP备19027023号-7