Python项目实战:将3D灰度图像转换为3D彩色图像

news2025/1/17 22:03:03

文章目录

  • (3D-GRAY) to (3D-RGB):使用颜色映射的方式,将灰度值映射到彩色空间中的特定颜色。
  • 一、多维数组:10x12x14
    • (1)channel重复:在RGB中,将【灰度图】分别赋值给【R/G/B图】,显示彩色图。
    • (2)channel叠加:在RGB的R图中,将【灰度图】与【R图】进行叠加,显示红色。
    • (3)channel拼接:(10x12x14)x1+(10x12x14)x3=(10x12x14)x4
  • 二、二维数组:10x10
    • (1)channel叠加:10x12x1+10x12x3=10x12x3

(3D-GRAY) to (3D-RGB):使用颜色映射的方式,将灰度值映射到彩色空间中的特定颜色。

一、多维数组:10x12x14

(1)channel重复:在RGB中,将【灰度图】分别赋值给【R/G/B图】,显示彩色图。

在这里插入图片描述

import numpy as np
import tifffile

# 加载16位灰度图像
image_data = tifffile.imread('gray_image_raw.tif')        # 原始-灰度图像(16-bit): 50, 444, 1112

# 将图像的数据类型转换为32位整数,以便进行操作
image_data = image_data.astype(np.uint32)

# 将灰度图像转换为彩色图像
color_image = np.zeros((*image_data.shape, 3), dtype=np.uint8)
color_image[..., 0] = (image_data >> 8) & 0xFF  # 红色通道
color_image[..., 1] = (image_data >> 4) & 0xFF  # 绿色通道
color_image[..., 2] = image_data & 0xFF  # 蓝色通道
###########################################################################
# (image_data >> 8) & 0xFF
# 		操作:通过右移8位(相当于除以256)来实现的,然后使用位运算AND操作符&和掩码0xFF来保留最低8位。
# 		作用:将16位图像的灰度范围缩放到0-255,适合于8位彩色图像的显示或处理。
###########################################################################

# 将彩色图像保存为新的tif文件
tifffile.imwrite('color_image.tif', color_image)

(2)channel叠加:在RGB的R图中,将【灰度图】与【R图】进行叠加,显示红色。

在这里插入图片描述

import numpy as np
import tifffile

# image_data与image_data_gray的图像尺度必须一致
gray_image_raw = tifffile.imread('gray_image_raw.tif')        	# 原始-灰度图像(16-bit):[50, 444, 1112]
gray_image_circle = tifffile.imread('gray_image_circle.tif')	# 空心圆-灰度图像(16-bit):[50, 444, 1112]

color_image = np.zeros((*gray_image_raw.shape, 3))          	# 空心圆-彩色图像(16-bit):[50, 444, 1112, 3]
# *gray_image_raw.shape表示将gray_image_raw.shape中的元素展开,并将它们作为参数传递给函数或操作。
color_image[..., 0] = gray_image_raw
color_image[..., 1] = gray_image_raw
color_image[..., 2] = gray_image_raw

# 将gray_image_circle中65535的值(空心圆=65535)赋给color_image
color_image[gray_image_circle == 65535, 0] = 65535              # 65535表示灰度图像中的最大像素值,0表示红色通道。
color_image = color_image.astype(gray_image_raw.dtype)          # 将数据类型转换为与image_data一样
tifffile.imwrite('color_image.tif', color_image)
print(color_image.shape[0], color_image.shape[1], color_image.shape[2], color_image.shape[3])       
# [50, 444, 1112, 3]

(3)channel拼接:(10x12x14)x1+(10x12x14)x3=(10x12x14)x4

在这里插入图片描述

import numpy as np
import tifffile

# image_data与image_data_gray的图像尺度必须一致
gray_image_raw = tifffile.imread('gray_image_raw.tif')        # 原始-灰度图像(16-bit): [50, 444, 1112]
gray_image_circle = tifffile.imread('gray_image.tif')			# 空心圆-灰度图像(16-bit): [50, 444, 1112]

color_image = np.zeros((*gray_image_raw.shape, 3))          	# 空心圆-彩色图像(16-bit): [50, 444, 1112, 3]
# *gray_image_raw.shape表示将gray_image_raw.shape中的元素展开,并将它们作为参数传递给函数或操作。
color_image[..., 0] = gray_image_raw
color_image[..., 1] = gray_image_raw
color_image[..., 2] = gray_image_raw

# 将gray_image_circle中65535的值(空心圆=65535)赋给color_image
color_image[gray_image_circle == 65535, 0] = 65535              # 65535表示灰度图像中的最大像素值,0表示红色通道。
color_image = color_image.astype(gray_image_raw.dtype)          # 将数据类型转换为与image_data一样

# 将灰度图像和调整后的 RGB 图像进行合并
gray_image_raw = np.expand_dims(gray_image_raw, axis=-1)
merged_image = np.concatenate((gray_image_raw, color_image), axis=3)

# 将彩色图像保存为新的tif文件
tifffile.imwrite('color_image.tif', merged_image)
print(merged_image.shape[0], merged_image.shape[1], merged_image.shape[2], merged_image.shape[3])		
# [50, 444, 1112, 4]

二、二维数组:10x10

(1)channel叠加:10x12x1+10x12x3=10x12x3

在这里插入图片描述

import cv2
import numpy as np

rgb_image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
gray_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2GRAY)

# 创建一个空白的多通道图像
height, width, _ = rgb_image.shape
merged_image = np.zeros((height, width, 3), dtype=np.uint8)

# 将灰度图像的数据复制到第四个通道
merged_image[..., 0] = gray_image
merged_image[..., 1] = gray_image
merged_image[..., 2] = gray_image

merged_image[..., 2] = rgb_image[..., 2]

# 显示合并后的图像
cv2.imshow("Merged Image", merged_image)
cv2.imshow("gray_image", gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

NPM与外部服务的集成(下)

目录 1、撤消访问令牌 2、在CI/CD工作流中使用私有包 2.1 创建新的访问令牌 持续整合 持续部署 交互式工作流 CIDR白名单 2.2 将令牌设置为CI/CD服务器上的环境变量 2.3 创建并签入特定于项目的.npmrc文件 2.4 令牌安全 3、Docker和私有模块 3.1 背景:运…

类加载器与反射

类加载器,反射 1.类加载器 1.1类加载器【理解】 作用 负责将.class文件(存储的物理文件)加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例(对象)调用类的类方法访问类或者接口的类变量&#xff0…

如何做好项目进度管理,项目经理可以这样做

项目追踪是通过把控项目的进度、成员的任务完成情况,以及项目计划进展等方面来进行的。项目经理在进行项目进度跟踪时,主要从以下三个方面进行: 1、制定并完善项目计划 项目经理使用进度猫等工具制定项目计划,通过甘特图对项目…

将Excel表格复制到Word文档中

目录 方式1:粘贴 -> 保留源格式(CtrlV的默认行为)参考文献 方式1:粘贴 -> 保留源格式(CtrlV的默认行为) 保留源格式是Word在粘贴来自其他程序内容时的默认行为(直接CtrlV)。如…

解决右键打印html只能识别1页的问题

hello,大家好久不见,昨天在开发中遇到了一个问题,就是在自己开发的网页中右键-->打印,由于页面内容过多,打印出来的内容只被识别到一页。 针对这一问题,查阅了好多资料最终解决啦。 1.问题重现 大家可以看到这个是我们开发的页面,公司需要…

.netcore grpc的proto文件字段详解

一、.proto文件字段概述 grpc的接口传输参数都是根据.proto文件约定的字段格式进行传输的grpc提供了多种类型字段;主要包括标量值类型(基础类型)、日期时间、可为null类型、字节、列表、字典、Any类型(任意类型)、One…

Python文件操作与输入输出:从基础到高级应用

文章目录 🍀引言🍀文件操作基础🍀上下文管理器与文件自动关闭🍀文件的迭代与逐行读取🍀文件的其他常见操作🍀输入输出基础🍀 文件输入输出🍀格式化输出🍀高级文件操作&am…

6---列表

一、有序列表 在文本前面添加数字英文句点(.)空格可以构成有序列表。如下表,最终生成的列表前面的编号和前面的数字没有绝对关系,总是从第一个数字开始依次增加。(和C的枚举有一点点类似) 注意:…

解决keep-alive缓存失效问题【必看!!!】

最近正在使用Vue3TsPinia重构后台管理项目&#xff0c;在写到路由缓存时&#xff0c;发现怎么都缓存不了&#xff0c;后来才找到了原因&#xff1a; Vue3中的setup语法糖中的name命名无效 即&#xff1a;如果你是按如下写组件的name&#xff0c;是不起作用的 <script nam…

ARM-M0内核MCU,内置24bit ADC,采样率4KSPS,传感器、电子秤、体脂秤专用,国产IC

ARM-M0内核MCU 内置24bit ADC &#xff0c;采样率4KSPS flash 64KB&#xff0c;SRAM 32KB 适用于传感器&#xff0c;电子秤&#xff0c;体脂秤等等

报名开启 | 2023RflySim暑期学校 : 基于RflySim平台飞控底层算法开发专题培训(第二期)

飞思实验室“基于RflySim平台飞控底层算法开发”系列专题培训第二期开启报名了&#xff01;专题培训由戴训华副教授以及飞思实验室学生&工程师团队主讲&#xff0c;采用“线上线下”集中授课形式&#xff0c;培训时间为8月28日-9月3日&#xff1b;课程内容以RflySim平台介绍…

vite+vue3初始化项目

node环境 14.18&#xff0c;16。最好是16 初始化项目 执行 npm create vuelatest 就是基于vite的命令&#xff0c;执行后会出现以下选择&#xff1a; 目录结构介绍 基本和vue2一个意思 vite.config.js文件如同vue2中的vue.config.js文件&#xff0c;用于配置项目的 安装…

C语言入门 Day_5 四则运算

目录 前言 1.四则运算 2.其他运算 3.易错点 4.思维导图 前言 图为世界上第一台通用计算机ENIAC,于1946年2月14日在美国宾夕法尼亚大学诞生。发明人是美国人莫克利&#xff08;JohnW.Mauchly&#xff09;和艾克特&#xff08;J.PresperEckert&#xff09;。 计算机的最开始…

应用在汽车前照灯系统中的环境光传感芯片

为了保证行车照明的安全性和方便性&#xff0c;减轻驾驶员的劳动强度。近年来&#xff0c;出现了许多新的照明控制系统&#xff0c;例如用于日间驾驶的自动照明系统、光束调节系统、延迟控制等。尤其是汽车自适应前照灯系统&#xff0c;它是一种能够自动改变两种以上的光型以适…

驱动压力P阀10Ω/流量Q阀40Ω比例阀放大器

模块式比例放大器用于控制比例压力流量阀&#xff0c;可驱动PQ比例阀或驱动两路独立控制比例阀&#xff0c;数码管显示现场可设置不同参数&#xff0c;带故障报警提示&#xff0c;DIN35mm导轨安装&#xff0c;24VDC供电&#xff1b;输入指令信号可选0-5V&#xff0c;0-10V&…

线切割数控系统 CAM 功能开发

在第三章我们完成了 Windows CE 系统的的内核定制与软件移植&#xff0c;本实验室开 发的 CAWEP 软件实现了从图形绘制、编辑到运动仿真、代码输出等功能&#xff0c;并未真 正意义上实现线切割机床的控制&#xff0c;本章我们在已有软件的基础上&#xff0c;进行研究与开…

DFT笔记 DC/AC mode与Func

DFT scan可以分为DC和AC两种&#xff0c;区别如下图 DC模式需要ate测试机台提供test clock时钟&#xff08;最快100M&#xff09;&#xff0c;DFT工程师需要升级普通reg变成带si和so&#xff0c;se pin的reg&#xff0c;并插入扫描链&#xff08;scan chain&#xff09;&#x…

系统组件化接口设计

1. 定义这里的系统是指对于一个大系统(如供应链系统)来说划分成的若干小的项目包(如销售管理、采购管理、生产管理)。系统间的接口要讨论的是有关项目包间如何传递数据、数据传递的方式、接口程序及调用方式等问题。2. 原则 保持各项目包间的高度独立性,包括设计的独…

使用wxPython嵌入浏览器加载本地HTML文件

使用wxPython模块嵌入浏览器并加载本地HTML文件的示例博客。以下是一个简单的示例&#xff1a; 介绍&#xff1a; 在本篇博客中&#xff0c;我们将使用Python的wxPython模块来嵌入一个浏览器&#xff0c;并加载一个本地的HTML文件。这对于需要在Python应用程序中显示Web内容…

Visual Studio 2022 中解决使用scanf报错的方法(一劳永逸)

目录 【前言】 一、scanf报错示例 二、解决使用scanf报错的方法 解决方法1&#xff08;不推荐&#xff09; 解决方法2&#xff08;不推荐&#xff09; 解决方法3&#xff08;强烈推荐&#xff09; 第一步 第二步 第三步 三、效果演示&#xff08;方法三&#xff09; …