图像分割的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,补好啦

相关推荐
Agent_Sea4 分钟前
私有化部署AI平台的成本临界点判断:从调用量、合规强度和业务周期三个维度核查
网络·人工智能·ai平台
IvorySQL5 分钟前
PostgreSQL 技术日报 (6月3日)|复制日志补丁更新,PG 黑客坊开启
数据库·人工智能·postgresql
Ki13818 分钟前
N记消费/专业级Blackwell架构GPU,以编译方式安装llama.cpp
人工智能·llama.cpp·rtx pro 4000
碳基硅坊12 分钟前
MTP在vLLM与llama.cpp上的性能对比:Qwen3.6与Gemma4实测
人工智能·vllm·llama.cpp·模型加速·mtp
五度易链-区域产业数字化管理平台13 分钟前
专精特新“小巨人”动态追踪(5月22日-28日)
大数据·人工智能
朱涛的自习室16 分钟前
逃离“古法测试”:AI 测试的“三大定律”
android·前端·人工智能
袁煦丞 cpolar内网穿透实验室20 分钟前
MailHog邮件沙盒,本地邮件测试!cpolar内网穿透实验室第797个成功挑战
人工智能·远程工作·内网穿透·cpolar·邮件·安全内网连接·邮件沙盒
咖啡星人k24 分钟前
AI Agent编程模式深度解析:从任务规划到自动调试的技术实现
人工智能
月疯25 分钟前
PyTorch 中定义了一个 LeakyReLU 激活函数层
人工智能·pytorch·python
深蓝电商API26 分钟前
AI驱动的自适应爬虫框架设计思路全解析
人工智能·爬虫