分割模型部件——将gt用边界在原始图像上展示,将pred用掩膜在原始图像上展示

目的

在论文可视化结果时,简介明了的展示我们自己模型的分割结果与gt的区别是十分重要的,因此这里记录一下自己的可视化方式。
踩坑:
因为大多数操作都是基于cv2进行的,因此你需要保持输入图像的h,w,c的顺序,RGB的顺序等。
建议:
没办法贴全自己的所有代码,因此以下代码建议各位借助Chat-GTP学透了再使用,不可盲目使用。

代码

示例代码:

'''
Descripttion:  
Author: Philo
Date: 2024-05-16 09:34:23
LastEditors: Philo
LastEditTime: 2024-05-16 09:34:23
'''

import cv2
import numpy as np

# 分割网络的模块,因此label和pred的通道数都是1,img通道数是3
# 传入的img维度为(3, h, w), label(1, h, w), pred(1, h, w)
def Fusion(img, label, pred):
    # pixel_mean = [123.675, 116.28, 103.53] # 根据数据预处理进行选择性使用
    # pixel_std = [58.395, 57.12, 57.375]
    # print("数据检查", img.shape, label.shape, pred.shape, np.unique(label), np.unique(pred))
    if len(np.unique(label)) > 2: # 因为findContours函数接受的必须是二值图,因此将label进行二值化
        label_np = np.asarray(label).copy()
        label_np[label_np <= 0.5] = 0
        label_np[label_np > 0.5] = 1
        label = label_np

    label = label.astype(np.uint8)[0] # 整数型 (h, w)格式
    pred = pred[0] # (h, w)格式
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))  # 创建了一个结构元素(kernel),结构元素是用于形态学操作(如膨胀、腐蚀等)的一个模板
    label = cv2.erode(label, kernel) # 该行代码对图像进行腐蚀操作。腐蚀是一种形态学操作,用于减小图像中的白色区域(前景),通常用于去除图像中的噪声或者分离物体
    contours, _ = cv2.findContours(label, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 找到边界

    img = np.transpose(img, (1, 2, 0)).copy() # 因为都是cv2中操作,需要保证图像的格式是(h,w,c)
    # img = (img * pixel_std) + pixel_mean
    img = img.astype(np.uint8).copy()
    # print(type(img), img.shape)
    img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 转化成BGR格式
    for cnt in contours:
        cv2.drawContours(img, [cnt], 0, (0, 0, 255), 1)  # 画边界框
    
    if len(np.unique(pred)) > 2:
        pred_np = np.asarray(pred).copy()
        pred_np[pred_np <= 0.5] = 0
        pred_np[pred_np > 0] = 1
        pred = pred_np

    overlay = np.zeros_like(img)  # 生成一个和原始img一样大小的numpy

    overlay[pred != 0] = [0, 255, 255]  # BGR颜色通道设置为淡黄色
    
    # 将淡黄色的色块叠加在原始图像上
    img = cv2.addWeighted(img, 1, overlay, 0.3, 0)
    
    return img

结果:
在这里插入图片描述
把框忽略了就是这个代码的输出哦

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philo`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值