关于图像分割项目的可视化脚本

news2024/9/22 21:24:31

1. 前言

之前实现了目标检测和图像分类任务的可视化脚本,本章将最后一个分割任务的可视化脚本实现

效果展示如下:

代码会在当前目录保存展示好的图片,从左到右依次为,原图、mask图、mask覆盖在原图的掩膜图

关于目标检测的可视化:

VOC:关于目标检测任务中,XML(voc格式)标注文件的可视化

YOLO :关于目标检测任务中,YOLO(txt格式)标注文件的可视化 

图像分类:图像分类任务的可视化脚本,生成类别json字典文件

2. 代码介绍

因为分割的数据格式问题,图像如何显示问题,可能会出现一些问题。

代码使用了好几种不同的分割数据集测试均可实现,可以保证大部分数据的可视化

具体的问题,在后文介绍

2.1 目录

数据摆放如下所示

图像放在images目录下,对应的GT图像放在masks文件下,这里的文件名是保持对应的,否则后续代码需要更改

show脚本放在data相同的路径

 

2.2 主函数

这里传入的root是images目录,这样random可以随机取出一张图片。根据目录的索引,自动找到图片对应的GT图像。

注:如果文件名不相同的话,需要自己在后面replace更换

这里的opacity 是掩膜的程度,0-1直接越小,效果越好

2.3 函数实现

这里运用的就是数字图像处理的内容,可以参考:数字图像处理

使用 PIL 打开图片,可以避免一些不必要的错误。cv的格式太严格了,不管是数据类型啊,还是通道,或者最后的np展示都需要相同的维度。而分割的GT一般都是8bit,本人调试很久,还是PIL打开方便

至于draw_image 函数,就是数字图像处理的绘制边框内容,因为matplotlib展示的时候会自动填色,这样可视化的效果更好,所以用matplotlib展示

2.4 结果展示

相同 opacity 展示

这里用绿色绘制边框,红色掩膜填充

不同opacity 展示

opacity = 0.5

opacity = 0.1

 

opacity = 0.9

3. 完整代码

代码:

import cv2
import numpy as np
import os
import random
from PIL import Image
import matplotlib.pyplot as plt


# 将mask绘制在原图
def draw_image(im,ms,brg,opacity):
    image_mask = im.copy()
    contours, _ = cv2.findContours(ms, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)    # 查找轮廓
    image_mask = cv2.drawContours(image_mask, contours, -1, (0, 255, 0), 2)     # 绘制边界
    image_mask = cv2.fillPoly(image_mask, contours, color=brg)                  # 填充
    img_bgr = cv2.addWeighted(im, opacity, image_mask, 1 - opacity, 0)

    return im,ms,img_bgr[:,:,::-1]


def main(imagePath,labelPath,bgr,opacity):
    image = np.array(Image.open(imagePath).convert('RGB'))
    label = np.array(Image.open(labelPath).convert('L'))

    a,b,c = draw_image(image,label,bgr,opacity)

    plt.figure(figsize=(12,8))
    for index,i in enumerate((a,b,c)):
        plt.subplot(1,3,index+1)
        plt.imshow(i)

    plt.savefig('./result.png')
    # plt.show()


if __name__ == '__main__':
    root = './data/images'
    images_path = [os.path.join(root,i) for i in os.listdir(root)]

    r = random.randint(0,len(images_path)-1)
    img_path = images_path[r]           # 随机取出一张图片
    mask_path = img_path.replace('images','masks')

    # opacity 越小,掩膜效果越深
    main(imagePath=img_path, labelPath=mask_path,bgr=(0,0,255),opacity=0.5)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1404454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

x-cmd pkg | hurl - HTTP 请求处理工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 Hurl 是 HTTP 请求处理工具,支持使用简单的纯文本格式定义的 HTTP 请求。它的用途非常广泛,既可以用于获取数据,也可以用于测试HTTP会话。 它可以链式处理请求,捕获数值…

在Go中处理HTTPS请求:一场加密的舞蹈

嘿,Go语言的爱好者们,你们准备好跳一场加密的舞蹈了吗?今天,我们要一起探讨如何在Go中处理那些神秘的HTTPS请求。 首先,我们要明白HTTPS是什么。简单来说,HTTPS就是给HTTP穿上了一层"加密的外套"…

如何根据openai官网的FileID下载文件

我的chatgpt网站,哈哈: https://chat.xutongbao.top/ file-type的版本需要注意: "file-type": "^15.0.0", const FileType require(file-type)const assistantsDownloadFileOnAzure async (req, res) > {let { apiK…

抖音出的AI工具火了!自动生成抖音文案,一键脚本数字人成片!

一些结论 抖音即创是一个一站式的智能创意生产与管理平台。 视频创作: AI视频脚本、数字人、一键成片 图文创作: 商品卡、图文工具 直播创作: AI背景、AI文案 抖音即创目前处于公测,全部功能免费使用! 抖音即创是什么? “抖音即创”是一…

复杂高层建筑环境多模态导航服务和引导管理机器人系统设计(预告)

课题基础 机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果 将上面这篇所涉及的算法等应用到如下环境中。 Gazebo新环境AWS RoboMaker Hospital医院场景适用于ROS1和ROS2 高层可以简化为多层测试。最典型的就是两层及以上。 简介 随着城市化进程的加速和高层建筑…

08-微服务Seata分布式事务使用

一、分布式事务简介 1.1 概念 事务ACID: A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失 败的情况。 C(Consistency&…

软件设计师——法律法规(四)

📑前言 本文主要是【法律法规】——软件设计师——法律法规的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

encodeURI 和 encodeURIComponent

encodeURI 和 encodeURIComponent 是用来处理加密 decodeURI 和 decodeURIComponent 是用来处理解密 encodeURI 和encodeURIComponent 区别: 唯一区别就是编码的字符范围 encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!#$&():/,;?’ encodeURIComponent方…

电脑录屏软件大比拼,哪个最适合你?

现如今,电脑录屏软件成为了许多用户记录、分享和教学的重要工具。从游戏玩家到专业制作人员,都需要高效的录屏软件。本文将介绍三款优秀的电脑录屏软件,通过详细的步骤和简洁的介绍,帮助用户轻松掌握这些工具的使用方法。 电脑录屏…

基于springboot+vue的台球管理系统

摘要 台球管理系统是一款基于Spring Boot和Vue.js技术栈构建的现代化系统,旨在提供全面而高效的台球场馆管理服务。该系统通过整合前后端技术,实现了场馆预约、会员管理、比赛统计等核心功能,为台球场馆管理员和玩家提供了便捷、智能的管理和…

在铸造铸铁平台时应用工艺有哪些——河北北重

铸造铸铁平台时,常用的工艺包括砂型铸造、金属型铸造和连铸工艺。 砂型铸造:砂型铸造是最常用的铸造工艺之一,适用于中小型铸铁平台的生产。该工艺使用砂模具,将铁水倒入模具中,待冷却后取出成型。砂型铸造工艺成本较低…

Flutter 滚动布局:sliver模型

一、滚动布局 Flutter中可滚动布局基本都来自Sliver模型,原理和安卓传统UI的ListView、RecyclerView类似,滚动布局里面的每个子组件的样式往往是相同的,由于组件占用内存较大,所以在内存上我们可以缓存有限个组件,滚动…

说说你对选择排序的理解?如何实现?应用场景?

一、是什么 选择排序(Selection sort)是一种简单直观的排序算法,无论什么数据进去都是 O(n) 的时间复杂度,所以用到它的时候,数据规模越小越好 其基本思想是:首先在未排序的数列中找到最小(or最大)元素&a…

工业计算机应用——AGV自动导引车行业

工业计算机在AGV行业的应用 自动导引车(AGV)是现代物流系统中的重要组成部分,能够在无人操作的情况下自动完成货物的搬运和运输。随着工业自动化的发展,工业计算机在AGV行业的应用越来越广泛,为AGV系统的智能化和高效化提供了有力支持。 一、工业计算机在AGV行业的应用场…

ICC2:如何优化网表中的assign语法

更多学习内容请关注「拾陆楼」知识星球 拾陆楼知识星球入口 问题来自星球提问: ICC2中有两种解决方法: 1) set_app_options -name opt.port.eliminate_verilog_assign -value true 工具优化时自己插buffer解决 2) change_name -hier -rule verilog 需要注意的是: 第一个opti…

Git学习笔记(第6章):GitHub操作(远程库操作)

目录 6.1 远程库操作 6.1.1 创建远程库 6.1.2 命名远程库 6.1.3 本地库推送到远程库(push) 6.1.4 远程库拉取到本地库(pull) 6.1.5 远程库克隆到本地库(clone) 6.2 团队内协作 6.3 跨团队协作 6.4 SSH免密登录 6.1 远程库操作 命令 作用 git remote -v 查看所有远程…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(16)-Fiddler如何充当第三者,再识AutoResponder标签-上篇

1.简介 Fiddler充当第三者,主要是通过AutoResponder标签在客户端和服务端之间,Fiddler抓包,然后改包,最后发送。AutoResponder这个功能可以算的上是Fiddler最实用的功能,可以让我们修改服务器端返回的数据&#xff0c…

MySQL-SQL-DCL

DCL-介绍 DCL-管理用户 1、查询用户 2、创建用户 3、修改用户密码 4、删除用户 注意: DCL-权限控制 1、查询权限 2、授予权限 授予全部权限 3、撤销权限 注意:

vue3 常见的路由传参无刷新修改当前路由url带参

无刷新修改当前路由url带参 //tabs切换部分 <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane v-for"(item,index) in tagList" :label"item.title" :name"item.name…

基于springboot酒店预订系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;AdminLTEjQueryvue.jselementuijsp 服务端技术&#xff1a;springbootmybatis 本系统功能包括&#xff1a; 一、…