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

news2024/9/25 23:17:40

目录

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

检验灰度图

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

检验代码

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

import cv2

img = 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_function

import argparse
import os
import os.path as osp
import sys
import numpy as np
from PIL import Image


def 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 += 1
    color_map = num_classes * [0, 0, 0]
    for i in range(0, num_classes):
        j = 0
        lab = i
        while 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 += 1
            lab >>= 3
    color_map = color_map[3:]
    return color_map


def gray2pseudo_color(args):
    """将灰度标注图片转换为伪彩色图片"""
    input = args.dir_or_file
    output_dir = args.output_dir
    if 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:
                    continue
    elif 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.coloradmin.cn/o/1026597.html

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

相关文章

接口测试工具Postman使用实践

一、接口定义 软件不同部分之间的交互接口。通常就是所谓的API――应用程序编程接口&#xff0c;其表现的形式是源代码。 —— [ 百度百科 ] 我们常说的接口一般指两种&#xff1a; &#xff08;1&#xff09;API&#xff1a;应用程序编程接口。程序间的接口 &#xff08;2…

Docker与Kubernetes集成以实现云原生应用程序:云原生在线教育平台

文章目录 项目概述项目架构项目步骤项目收益 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;云计算 ✨文章内容&#xff1a;云原生在线教育平台 &#x1f91d;希望作者的文…

【Zabbix】Zabbix结合WxPusher推送告警消息

WxPusher简单介绍 什么是WxPusher WxPusher (微信推送服务)是一个使用微信公众号作为通道的&#xff0c;实时信息推送平台&#xff0c;你可以通过调用API的方式&#xff0c;把信息推送到微信上&#xff0c;无需安装额外的软件&#xff0c;即可做到信息实时通知。 你可以使用W…

【Spring Cloud系列】Feign详解与实战

Feign详解与实战 文章目录 Feign详解与实战一、概述二、什么是Feign三、Feign特性四、Feign简单使用3.1 Feign使用步骤3.2 Feign具体使用1. 引入依赖2. 启动类上添加注解3.编写FeignClient接口 五、使用Feign发起http请求5.1 Maven导入Feign配置&#xff0c;并集成Jackson5.2 F…

如何理解功率谱/能量谱密度?它与自相关函数的关系?

目录 1. 自相关函数&#xff1a; 2.功率谱密度 /能量谱密度 什么是 能量信号&#xff1f; 什么是 功率信号&#xff1f; 什么是 能量谱密度&#xff1f; 什么是 功率谱密度&#xff1f; 3.自相关函数 与 能量谱密度/功率谱密度 的关系&#xff1f; 4.周期性的功率信号的 功…

安卓ROM定制 修改必备常识-----初步了解system系统分区文件夹的基本含义 【二】

安卓修改rom 固件 修改GSI 移植rom 必备常识 lib--**so文件基本解析 一起来了解system目录相应文件的用途吧。&#xff08;rom版本不同里面的app也会不一样&#xff09; 简单打开img格式后缀文件 给大家说下最简单的方法提取img里面的文件&#xff0c;对于后缀img格式的文件可…

实现过滤词汇高亮

js实现过滤词汇高亮 场景代码 场景 前端实现查询后&#xff0c;将过滤后数据中的搜索词展现为高亮。 代码 思路&#xff1a;利用 正则表达式 对过滤词添加类名&#xff0c;然后使用 v-html 渲染在表格中。 // 复制json数组copyObjectDataList(arr) {let list [];_.each(arr…

(2021|PMLR,DALL·E,自回归,Transformer)零样本文本到图像生成

Zero-Shot Text-to-Image Generation 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 方法 2.1. 第一阶段&#xff1a;学习视觉码本 2.2. 第二阶段&#xff1a…

23种设计模式汇总详解

设计原则 中文名称英文名称含义解释单一职责原则Single Responsibility Principle(SRP)任何一个软件模块都应该只对某一类行为者负责一个类只干一件事&#xff0c;实现类要单一开闭原则Open-Close Principle(OCP)软件实体&#xff08;类、模块、函数等&#xff09;应该是可以扩…

vmware NAT模式配置方式

VMware在NAT模式下宿主机与多台虚拟机互相访问&#xff0c;可连接外网 虚拟机的网络连接类型的选择&#xff0c;网络连接类型一共有桥接、NAT、仅主机和不联网四种。 桥接&#xff1a;选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系&#xff0c;相当于连接在同一交换机…

飞行动力学 - 第30节-滚转收敛模态机理及飞行品质 之 基础点摘要

飞行动力学 - 第30节-滚转收敛模态机理及飞行品质 之 基础点摘要 1. 典型横航向响应2. 滚转收敛模态机理3. 滚转收敛模态近似4. 滚转收敛品质要求5. 参考资料 1. 典型横航向响应 2. 滚转收敛模态机理 3. 滚转收敛模态近似 横航向扰动之后首先体现的是重阻尼的滚转收敛模态 飞…

易点易动固定资产管理系统:解锁全面管理固定资产的多重功能优势

在现代企业中&#xff0c;固定资产管理是一项至关重要的任务。单单依靠表格来管理固定资产已经无法满足大多数企业的需要。因此&#xff0c;企业通常需要一款专业的固定资产管理系统进行固定资产的日常管理。易点易动固定资产管理系统以其多项强大功能&#xff0c;成为企业实现…

著名书法家傅成洪受邀出席香港第八届“一带一路”高峰论坛

香港第八届“一带一路”高峰论坛于9月13日至14日在香港隆重举行&#xff0c;吸引了来自海内外的6000多名嘉宾&#xff0c;共同回顾“一带一路”倡议的历程&#xff0c;并展望未来的投资和商贸机遇。这一庆祝活动恰逢“一带一路”倡议的10周年&#xff0c;主题定为“携手十载 共…

使用Kalibr工具线对相机+IMU离线标定

传感器标定的准确后面做算法才会更准确&#xff0c;所以对Kalibr进行学习。 一、Kalibr编译 1、下载kalibr包 GitHub下载地址 2、 解压后放到/catkin_ws/src文件夹下 重新命令文件夹为kalibr 3、 安装依赖库 sudo apt-get install python-setuptools python-rosinstall…

datax和datax-web编译安装和使用

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。 目前支持的数据源如下: 与sqoop的对比: 1. 编译 1.1编译datax idea打开datax项目,…

观察级水下机器人使用系列之七机械手臂

本期是观察级水下机器人使用系列的最后一期&#xff0c;主要讲ROV所使用的机械臂。机械臂正式名称为5功能电动机械&#xff0c;型号为BE-500&#xff0c;由法国公司Ocean Innovation System设计的&#xff0c;可代替人工进行水下作业&#xff0c;完成海底样品采集、打捞、设备定…

9月20日作业

时钟代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QTime> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class W…

【Hash表】第一个不重复字符-力扣 387

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

应用平台 - OPPO敏感权限

那天在OPPO平台更新app时&#xff0c;发现平台权限升级&#xff0c;新增了敏感权限校验&#xff0c;而且还是必填项… Google 从 Android6.0 开始就对权限做了分类适配&#xff0c;粗浅来看将权限分为了普通权限、危险权限&#xff08;运行时权限、敏感权限&#xff09;&#x…

干洗店小程序,洗鞋店小程序,互联网洗鞋店,企业干洗方案,干洗行业小程序,上门取衣小程序,预约干洗小程序,校园干洗店小程序,工厂干洗店小程序,干洗店小程序开发;

干洗店小程序,洗鞋店小程序&#xff0c;互联网洗鞋店&#xff0c;企业干洗方案,干洗行业小程序,上门取衣小程序,预约干洗小程序,校园干洗店小程序,工厂干洗店小程序,干洗店小程序开发,微信干洗店小程序&#xff1b; 一、核心功能介绍 1.(支持上门取送、送货到店、寄存网点、智能…