语义分割——灰度图像转伪彩色图像

目录

  • 检验灰度图
    • 检验代码
  • 灰度图转伪彩色图代码
    • 转换代码使用细则
  • 示例转换结果
  • 总结

检验灰度图

制作语义分割数据集或用训练好模型测试图像时,得到的结果是灰度图像,如下:
在这里插入图片描述

检验代码

上面图像灰度值不是全是全为0,灰度范围在[0,1]之间,使用下面脚本测试灰度图像的灰度值是否全为0:

import cv2img = cv2.imread("output/result/Result_2023.9.18_Int8/Val_Predict/BlockImage/1.png")min_val = img.min()
max_val= img.max()print("min_val",min_val)
print("max_val",max_val)
print("dtype",img.dtype)
print("shape",img.shape)
print("img = ",img)cv2.imshow("1",img)
cv2.waitKey()
cv2.destroyWindow()

通过上面脚本检测结果如下:

在这里插入图片描述

灰度图转伪彩色图代码

上面的灰度图直观的看不了测试结果怎样,得将[0,1]区间的灰度值映射到[0,255],详解代码见下:

from __future__ import print_functionimport argparse
import os
import os.path as osp
import sys
import numpy as np
from PIL import Imagedef parse_args():parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)parser.add_argument('dir_or_file', help='input gray label directory or file list path')parser.add_argument('output_dir', help='output colorful label directory')parser.add_argument('--dataset_dir', help='dataset directory')parser.add_argument('--file_separator', help='file list separator')return parser.parse_args()def get_color_map_list(num_classes):"""Returns the color map for visualizing the segmentation mask,which can support arbitrary number of classes.Args:num_classes (int): Number of classes.Returns:(list). The color map."""num_classes += 1color_map = num_classes * [0, 0, 0]for i in range(0, num_classes):j = 0lab = iwhile lab:color_map[i * 3] |= (((lab >> 0) & 1) << (7 - j))color_map[i * 3 + 1] |= (((lab >> 1) & 1) << (7 - j))color_map[i * 3 + 2] |= (((lab >> 2) & 1) << (7 - j))j += 1lab >>= 3color_map = color_map[3:]return color_mapdef gray2pseudo_color(args):"""将灰度标注图片转换为伪彩色图片"""input = args.dir_or_fileoutput_dir = args.output_dirif not osp.exists(output_dir):os.makedirs(output_dir)print('Creating colorful label directory:', output_dir)color_map = get_color_map_list(256)if os.path.isdir(input):for fpath, dirs, fs in os.walk(input):for f in fs:try:grt_path = osp.join(fpath, f)_output_dir = fpath.replace(input, '')_output_dir = _output_dir.lstrip(os.path.sep)im = Image.open(grt_path)lbl = np.asarray(im)lbl_pil = Image.fromarray(lbl.astype(np.uint8), mode='P')lbl_pil.putpalette(color_map)real_dir = osp.join(output_dir, _output_dir)if not osp.exists(real_dir):os.makedirs(real_dir)new_grt_path = osp.join(real_dir, f)lbl_pil.save(new_grt_path)print('New label path:', new_grt_path)except:continueelif os.path.isfile(input):if args.dataset_dir is None or args.file_separator is None:print('No dataset_dir or file_separator input!')sys.exit()with open(input) as f:for line in f:parts = line.strip().split(args.file_separator)grt_name = parts[1]grt_path = os.path.join(args.dataset_dir, grt_name)im = Image.open(grt_path)lbl = np.asarray(im)lbl_pil = Image.fromarray(lbl.astype(np.uint8), mode='P')lbl_pil.putpalette(color_map)grt_dir, _ = osp.split(grt_name)new_dir = osp.join(output_dir, grt_dir)if not osp.exists(new_dir):os.makedirs(new_dir)new_grt_path = osp.join(output_dir, grt_name)lbl_pil.save(new_grt_path)print('New label path:', new_grt_path)else:print('It\'s neither a dir nor a file')if __name__ == '__main__':args = parse_args()gray2pseudo_color(args)

转换代码使用细则

使用该代码,只需要在终端去到该文件所在路径下,添加灰度图像文件夹路径和转换后的保存路径即可。

终端中输入的命令为:

python gray2pseudo_color.py <dir_or_file> <output_dir>

上面命令中:

dir_or_file为灰度图所在的路径

output_dir为转换后伪彩色图像的保存路径

具体的使用方法见下图:

在这里插入图片描述

示例转换结果

转换后的对比结果如下图:

在这里插入图片描述

总结

以上就是语义分割中灰度图像转伪彩色图像的方法,希望能帮到你,多多支持,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL的触发器

触发器是与表有关的数据库对象&#xff0c;指在 insert/update/delete 之前 (BEFORE) 或之后 (AFTER) &#xff0c;触发并执行触发器中定义的SQL 语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。使用别名OLD 和 NEW 来引用…

Docker镜像制作

Docker镜像制作 镜像制作 基本命令 容器转为镜像 docker commit 容器id 镜像名称:版本号 docker save -o 压缩文件名称 镜像名称:版本号 docker load -i 压缩文件名称实例操作 容器转为镜像 需要注意的是&#xff1a;制作镜像并不会把里面的目录挂载的文件写到镜像中 # 查看…

评价指标分类

声明 本文是学习GB-T 42874-2023 城市公共设施服务 城市家具 系统建设实施评价规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件确立了城市家具系统建设实施的评价原则、评价流程&#xff0c;给出了评价指标&#xff0c;描述了 方…

第 113 场 LeetCode 双周赛题解

A 使数组成为递增数组的最少右移次数 数据范围小直接模拟… class Solution { public:int minimumRightShifts(vector<int> &nums) {for (int op 0; op < nums.size(); op) {if (is_sorted(nums.begin(), nums.end()))//nums是否已经有序return op;rotate(nums.b…

Hive 的权限管理

目录 ​编辑 一、Hive权限简介 1.1 hive中的用户与组 1.1.1 用户 1.1.2 组 1.1.3 角色 1.2 使用场景 1.2.1 hive cli 1.2.2 hiveserver2 1.2.3 hcatalog api 1.3 权限模型 1.3.1 Storage Based Authorization in the Metastore Server 1.3.2 SQL Standards Based …

element树形组件使用之数据授权

<template><div><el-card class"tree-card"><p class"title">数据授权</p><div class"box"><div class"tree"><div class"member">选择授权人员</div><div class…

【python数据分析基础】—pandas中loc()与iloc()的介绍与区别

文章目录 前言一、loc[]函数二、iloc[]函数三、详细用法loc方法iloc方法 总结共同点不同点 前言 我们经常在寻找数据的某行或者某列的时常用到Pandas中的两种方法iloc和loc&#xff0c;两种方法都接收两个参数&#xff0c;第一个参数是行的范围&#xff0c;第二个参数是列的范…

前端编写一个express实现项目部署上线流程

1.先把写好的.vue文件打包成浏览器认识的html、css、js文件 使用npm run bulid命令 2.写一个express服务器 3.创建一个static文件夹&#xff0c;用来存放打包好的html、css、js文件

阿里测开面试大全(一)附答案完整版

万字长文&#xff0c;建议收藏 1 什么是POM&#xff0c;为什么要使用它&#xff1f; POM是Page Object Model的简称&#xff0c;它是一种设计思想&#xff0c;而不是框架。大概的意思是&#xff0c;把一个一个页面&#xff0c;当做一个对象&#xff0c;页面的元素和元素之间操…

day28IO流(字节流字符流)

1. IO概述 1.1 什么是IO 生活中&#xff0c;你肯定经历过这样的场景。当你编辑一个文本文件&#xff0c;忘记了ctrls &#xff0c;可能文件就白白编辑了。当你电脑上插入一个U盘&#xff0c;可以把一个视频&#xff0c;拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢&a…

MSTP+VRRP vlan接口作为网关(2)

SW2 g0/0/2 g0/0/5 g0/0/3 g0/0/4 shutdow 链路失效, vlan 3 的 根桥、master 依然是sw2 PC3的数据包会什么还会到达外部环回口&#xff1f; SW2: dis stp instance 2 brief dis vrrp brief vlan3的主机PC3访问3.3.3.3.数据包发给网关(master)Sw2 pc3 : tracert …

C#中的方法

引言 在C#编程语言中&#xff0c;方法是一种封装了一系列可执行代码的重要构建块。通过方法&#xff0c;我们可以将代码逻辑进行模块化和复用&#xff0c;提高代码的可读性和可维护性。本文将深入探讨C#中的方法的定义、参数传递、返回值、重载、递归等方面的知识&#xff0c;…

Python 自动化运维 100个常见问题.pdf

Python自动化运维能够自动执行重复性任务&#xff0c;包括文件操作、数据处理、系统管理等&#xff0c;从而释放出更多的时间用于更有价值的工作。这有助于降低人工错误的风险&#xff0c;提高团队的工作效率。 以下是我们为大家梳理的Python 自动化运维 的学习路线&#xff0c…

Python爬虫基础(三):使用Selenium动态加载网页

文章目录 系列文章索引一、Selenium简介1、什么是selenium&#xff1f;2、为什么使用selenium3、安装selenium&#xff08;1&#xff09;谷歌浏览器驱动下载安装&#xff08;2&#xff09;安装selenium 二、Selenium使用1、简单使用2、元素定位3、获取元素信息4、交互 三、Phan…

数据包络分析(DEA)——CCR模型

写在前面&#xff1a; 博主本人大学期间参加数学建模竞赛十多余次&#xff0c;获奖等级均在二等奖以上。为了让更多学生在数学建模这条路上少走弯路&#xff0c;故将数学建模常用数学模型算法汇聚于此专栏&#xff0c;希望能够对要参加数学建模比赛的同学们有所帮助。 目录 1. …

四、C#—变量,表达式,运算符(2)

&#x1f33b;&#x1f33b; 目录 一、表达式1.1 什么是表达式1.2 表达式的基本组成 二、运算符2.1 算术运算符2.1.1 使用 / 运算符时的注意事项2.1.2 使用%运算符时的注意事项 2.2 赋值运算符2.2.1 简单赋值运算符2.2.2 复合赋值运算符 2.3 关系运算符2.4 逻辑运算符2.4.1 逻辑…

PIC16F18323电源控制软件

最近使用PIC16F18323设计一个电源的控制软件&#xff0c;主要功能有&#xff1a;检测输入电压&#xff0c;NTC贴片电阻温度监测&#xff0c;电路输出开环检测及输出过压保护锁死等。 PIC16F18323系列单片机有256字节内存&#xff0c;1K字节ROM空间&#xff0c;使用的是高速内部…

微服务生态系统:使用Spring Cloud构建分布式系统

文章目录 什么是微服务&#xff1f;为什么选择Spring Cloud&#xff1f;Spring Cloud的关键组件示例&#xff1a;构建一个简单的微服务步骤1&#xff1a;创建Spring Boot项目步骤2&#xff1a;配置Eureka服务发现步骤3&#xff1a;创建REST控制器步骤4&#xff1a;运行项目步骤…

达梦数据库阻塞与死锁查询

一、数据库阻塞 1.查询被阻塞的信息和引起阻塞的信息 SELECT SYSDATE STATTIME, DATEDIFF(SS, S1.LAST_SEND_TIME, SYSDATE) SS , 被阻塞的信息 WT , S1.SESS_ID WT_SESS_ID, S1.SQL_TEXT WT_SQL_TEXT, S1.STATE WT_STATE, S1.TRX_ID WT_TRX_ID, S1.USER_NAME WT_USER_NAME, …

实用的嵌入式编码技巧:第三部分

每个触发器都有两个我们在风险方面违反的关键规格。“建立时间”是时钟到来之前输入数据必须稳定的最小纳秒数。“保持时间”告诉我们在时钟转换后保持数据存在多长时间。 这些规格因逻辑设备而异。有些可能需要数十纳秒的设置和/或保持时间&#xff1b;其他人则需要少一个数量…