首页 > 其他分享 >将labelme生成的label和img合并展示

将labelme生成的label和img合并展示

时间:2024-11-13 17:31:37浏览次数:1  
标签:img color image label padding 图例 path labelme legend

img:

label:

合并达到的效果:

实现代码:

点击查看代码
import cv2
import numpy as np
from PIL import Image

def add_legend(image, colors, labels, alpha=1):
    """
    在图像的右上角添加图例,使用固定的尺寸。
    :param image: 输入的BGR图像。
    :param colors: 颜色字典,键是类值,值是颜色元组(B, G, R)。
    :param labels: 标签字典,键是类值,值是标签文本。
    :param alpha: 叠加透明度。
    :return: 带图例的图像。
    """
    # 图像尺寸
    height, width = image.shape[:2]

    # 固定图例尺寸和参数
    legend_height = 20
    legend_width = 150
    legend_padding = 10
    color_box_size = 15
    text_offset = 20
    text_font_scale = 0.5
    text_thickness = 1
    line_height = 20  # 每一行的高度

    # 创建图例的背景
    legend = np.zeros((legend_height * len(labels) + legend_padding * 2, legend_width, 3), dtype=np.uint8)

    for idx, (key, color) in enumerate(colors.items()):
        # 设置图例的颜色框
        top_left = (legend_padding, idx * line_height + legend_padding)
        bottom_right = (legend_padding + color_box_size, idx * line_height + legend_padding + color_box_size)
        cv2.rectangle(legend, top_left, bottom_right, color[::1], -1)  # 颜色需要从 BGR 转换为 RGB

        # 添加标签文本
        text_position = (legend_padding + color_box_size + text_offset, top_left[1] + color_box_size)
        cv2.putText(legend, labels[key], text_position, cv2.FONT_HERSHEY_SIMPLEX, text_font_scale, (255, 255, 255),
                    text_thickness)

    # 计算图例位置
    legend_x = width - legend_width - legend_padding
    legend_y = legend_padding

    # 将图例叠加到原图像右上角
    overlay = image.copy()
    overlay[legend_y:legend_y + legend.shape[0], legend_x:legend_x + legend.shape[1]] = legend

    # 透明混合
    result = cv2.addWeighted(overlay, alpha, image, 1 - alpha, 0)

    return result

def save_img_label(image_path,mask_path,save_path):
    # image_path=r'.\data_insar\path_all\data\0.png'#三通道彩色图
    # mask_path=r'.\data_insar\path_all\annotations\0.png' #对应的单通道灰度图标签掩码
    
    #读取原图
    image=cv2.imread(image_path)
    mask=Image.open(mask_path)
    mask = np.array(mask)
    
    # 创建一个空白的彩色叠加图 (与原图相同大小,但包含透明度通道)
    overlay = np.zeros((image.shape[0], image.shape[1], 3), dtype=np.uint8)
    
    colors = {
        1: (0, 0, 255),   # 类1 - 红色
    }
    
    colors_lengend = {
        1: (0, 0, 255),   # 类1 - 红色
    }
    
    labels = {
        1: 'cat',
    }
    
    # 遍历掩码中的每个类别,为每个类别设置颜色
    for value, color in colors.items():
        overlay[mask == value] = color
    
    combined = cv2.addWeighted(overlay, 0.3, image, 1, 0)
    # 添加图例到右上角
    result_with_legend = add_legend(combined, colors_lengend, labels, alpha=0.5)
    #保存结果
    cv2.imwrite(os.path.join(save_path,'cat_label.png'), result_with_legend)

in_img_path = r".\data\cat.png"
in_json_path = r".\annotations\cat_json\label.png"
save_path =  r".\test"
save_img_label(in_img_path,in_json_path,save_path)

其中很大部分都是参考https://www.cnblogs.com/wancy/p/18212547,详细请参考该博主

标签:img,color,image,label,padding,图例,path,labelme,legend
From: https://www.cnblogs.com/congxinxue/p/18544422

相关文章

  • MMdetection 问题报错 mmdet/evaluation/metrics/coco_metric.py data[‘category_id
    方案一:有人说在自己定义的conifg文件中增加 metainfo={'classes':('class1','class2','class2',),'palette':[(220,20,60),(221,11,22),(221,11,42),]}方案二:修改mmdet/evaluation/metrics文件的内......
  • 织梦如何去除img图片中的style width height属性
    问题:在做响应式模板时,图片无法自适应,原因是织梦编辑器在上传图片时会自动加上 style、width 和 height 属性。解决方法:修改 article_add.php 文件:打开 dede/article_add.php 文件。搜索以下代码:$body=AnalyseHtmlBody($body,$description,$litpic,$keyw......
  • 【日常记录】解包android vendor_boot.img和vendor_boot-debug.img
    查看文件类型:$filevendor_boot.imgvendor_boot.img:data$filevendor_boot-debug.imgvendor_boot-debug.img:dataunpack_bootimg用法:$./unpack_bootimg-husage:unpack_bootimg[-h]--boot_imgBOOT_IMG[--outOUT][--format{info,mkbootimg}][-0]Unpacks......
  • Linux 操作系统下 e2label 命令介绍和使用案例
    Linux操作系统下e2label命令介绍和使用案例e2label命令介绍e2label是一个用于管理Linux文件系统卷标的命令行工具,主要支持EXT2、EXT3和EXT4文件系统。通过该命令,用户可以查看或修改分区的卷标,从而更好地组织和管理文件基本语法bashe2label[设备文件名][新卷......
  • 源鲁杯2024[Round 3] CheckImg
    新思路:十六进制错位恢复新知识:DNA编码下载文件,是一张图片,010、属性、pngcheck都没有发现信息,用stegslove打开查看,在red0通道发现图片下面有明显的隐写,后面的green0有提示(这图片真的好大,一整个屏幕看不到完整的)Green0通道的整句话应该是attentiontodetails,先存一下red0的......
  • 图像标注软件——labelme
    文章目录一、软件特点二、应用场景三、安装与使用四、功能扩展与定制五、注意事项Labelme是一款功能强大的图像标注软件,由麻省理工学院(MIT)的计算机科学和人工智能实验室(CSAIL)研发。以下是关于Labelme的详细介绍:一、软件特点多种标注方式:Labelme支持多边形、矩形、圆......
  • [QT基础系列]标签QLabel
    标签QLabelQLabel是Qt中的标签类,通常用于显示提示性的文本,也可以显示图像文本可以获取和设置按钮上显示的文本//获取和设置显示的文本QStringtext()const;voidsetText(constQString&text);对齐方式用于设置标签中的内容在水平和垂直两个方向上的对齐方式......
  • 下载并部署数据自动标注工具X-AnyLabeling
    目录项目介绍代码下载与环境配置使用自动标注导入自己模型标注效果展示官方连接:https://github.com/CVHub520/X-AnyLabeling如果打不开官方连接可以直接下载上方☝我的文件夹。项目介绍    此项目是用于数据方面的标注工具,其包含目标检测、关键点检测、文字......
  • [题解]CF825E Minimal Labels
    LPhang为什么是神?思路显然可以想到一个错误的贪心:直接拓扑排序,每一次选择当前可以拓展的点中最小的元素进行编号。由于可能存在一个值较小的元素被藏在一个较大的元素后面,这种贪心就会出问题。出问题的本质原因就是我们希望字典序最小,就得使得越小的位置分配到更小的值。不妨......
  • correct = pred.eq(labels).sum() 的解读
            correct=pred.eq(labels).sum()怕是深度学习demo中最常见的代码了,eq()和sum()都是python中很常用的函数,但是这里的都是prtorch里面的函数,与python中的还是有一些区别的。python中的用法     python中的eq()的典型用法:fromoperatorimporteqa......