当前位置: 首页 > news >正文

图像分割的mask有空洞怎么修补

分享一个对实例分割mask修补的方法,希望对大家有所帮助。

1. 这是我准备分割的图片

2 分割结果

可以看到衣服部分有一些没分割出来,二值化图片能清晰看到衣服部分有些黑色未分出的地方。

3 补全mask区域

import cv2
import numpy as np

def fill_mask_hole(img):
    # 将输入图片二值化
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    _, mask= cv2.threshold(img, 250, 255, cv2.THRESH_BINARY)
    # 二值化图片黑白反转
    mask = 255-mask

    # 因为最下面有一块黑色区域,没完全被包围。将最下面一行像素改成白色,保住黑色区域
    mask[-1,:] = 255

    # 寻找有多少孔洞
    contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    # 孔洞个数
    len_contour = len(contours)
    contour_list = []
    # 逐个补孔
    for i in range(len_contour):
        drawing = np.zeros_like(mask, np.uint8)  # create a black image
        
        # 根据孔洞范围判断需不需要补
        area = cv2.contourArea(contours[i])
        if area>1000: # 有大孔洞增加这个阈值
            continue
        
        img_contour = cv2.drawContours(drawing, contours, i, (255, 255, 255), -1)
        contour_list.append(img_contour)
    out = sum(contour_list)
    
    # 对应上面mask[-1,:] = 255,将改的白边改回来
    out[-1,:] = out[-2,:]
    return out


img1 = cv2.imread('test.jpg')
mask = fill_mask_hole(img1)
cv2.imwrite('mask1.jpg',mask)

4 结果图mask1.jpg

ok,补好啦

相关文章:

  • tldr命令助记
  • Qt 控件概述 QLCDNumber 和 Progressbar
  • 手动集成sqlite的方法
  • 我开发的PDF转WORD免费工具
  • 【LangChain入门 4 Prompts组件】提示词追加示例 FewShotPromptTemplate和示例选择器ExampleSelector
  • Vision-R1:用 “冷启动 + 强化学习” 解锁多模态模型的推理能力
  • AI音乐创作原理:解锁创意与算法的完美结合
  • 【AVRCP】蓝牙AVRCP协议中的L2CAP互操作性要求深度解析
  • Servlet介绍(详细)
  • C# 事件机制详解:定义、订阅、触发与应用实践
  • 大数据学习(78)-spark streaming与flink
  • rust学习笔记16-206.反转链表(递归)
  • 用java代码开发一个安卓app,实现账号注册登录
  • 算法训练篇06--力扣611.有效三角形的个数
  • coze ai assistant Task5
  • 相机光学中一些疑难问题的解释
  • 共注意力机制及创新点深度解析
  • 小程序开发中的用户反馈收集与分析
  • Grid布局示例代码
  • ubuntu20如何升级nginx到最新版本(其它版本大概率也可以)
  • 演员黄晓明、金世佳进入上海戏剧学院2025年博士研究生复试名单
  • 工人日报:“鼠标手”被纳入职业病,劳动保障网越织越密
  • 人民日报访巴西总统卢拉:“巴中关系正处于历史最好时期”
  • 摩根士丹利:对冲基金已加码,八成投资者有意近期增配中国
  • 法院就“行人相撞案”道歉:执法公正,普法莫拉开“距离”
  • 中美经贸高层会谈在瑞士日内瓦开始举行