python,将多张图像图像保存为tif格式,包括高纬度

本文介绍了如何利用Python和skimage库将多个图像文件保存为单一的tif格式文件的方法。重点讲解了创建多维数组来容纳图像序列的过程,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候,为了方便管理我们的图像数据集或其他类型的数据集,或者使用图像建立一个仿真环境。我们可能需要使用到tif格式来保存图像。
在这里我简单介绍一下自己的思路和详细细节。

老规矩,先上代码。

#-----------------------------------------------------
#将文件夹中的图像保存到tif中
import os
from skimage import io

#filepath='D:\\3DUSRebuild\\MyYOLO5\\yolov5\\data\\tif_8'
filepath='D:\\3DUSRebuild\\MyYOLO5\\yolov5\\test_model\\yuanshituxiangxulie'
files=os.listdir(filepath)
print(io.imread(os.path.join(filepath,files[0])).shape[0])
print(io.imread(os.path.join(filepath,files[0])).shape[2])
count=0
'''
im3d=np.zeros(shape=(len(files),io.imread(os.path.join(filepath,files[0])).shape[0],
                     io.imread(os.path.join(filepath,files[0])).shape[1]),dtype='uint8')
关对im3d=np.zeros(....)这个函数的分析,即使用思路
首先,shape=(),第一个维度len(files)使我们这次要保存到im3d模型中的新的维度的数据的维度,例如我们想将30张图像保存到tif中,len(files)表示图像的数量,也就是这个文件夹下文件的数量。
还是以将30张图像保存到fit中为例,第二个变量io.imread(os.path.join(filepath,files[0])).shape[0]和io.imread(os.path.join(filepath,files[0])).shape[1]是图像的长宽
当我们将已经保存好的tif继续保存到更高维度的tif中时,此时参数会发生变化,例如我们将20个只有30张图像的fit保存到一个新的tif容器中。
看一下此时的代码格式
im3d=np.zeros(shape=(len(files),io.imread(os.path.join(filepath,files[0])).shape[0],
                     io.imread(os.path.join(filepath,files[0])).shape[1],
                     io.imread(os.path.join(filepath,files[0])).shape[2],),dtype='uint8')
此时,len(files)表示文件夹下tif的数量,len(files)=20,
io.imread(os.path.join(filepath,files[0])).shape[0]表示包含30张图像的tif中图像的数量,
io.imread(os.path.join(filepath,files[0])).shape[1]表示图像的长
io.imread(os.path.join(filepath,files[0])).shape[2]表示图像的宽
以此类推,知道你将你所有的图像都保存进来。这个tif的维度可以很高很高。
其实,理解这个保存图像的思想很简单,我们只需要理解向零矩阵中填充数据的规则就可以了
我们就是使用零矩阵初始化一个容器。这个容器首先需要初始尺寸其尺寸。第0维为新一批数据的数量,后面是已经保存好的tif或者是图像的尺寸
在填充时,其实我们只需要在len(files)这个维度填充数据就可以了
'''
'''
im3d=np.zeros(shape=(len(files),io.imread(os.path.join(filepath,files[0])).shape[0],
                     io.imread(os.path.join(filepath,files[0])).shape[1],
                     io.imread(os.path.join(filepath,files[0])).shape[2],
                     io.imread(os.path.join(filepath,files[0])).shape[3],
                     io.imread(os.path.join(filepath,files[0])).shape[4],
                     io.imread(os.path.join(filepath,files[0])).shape[5]),
              dtype='uint8')


im3d=np.zeros(shape=(len(files),io.imread(os.path.join(filepath,files[0])).shape[0],
                     io.imread(os.path.join(filepath,files[0])).shape[1]),dtype='uint8')

print(im3d.shape) #,io.imread(os.path.join(filepath,files[0])).shape[2])
for file_ in files:
    im2d=io.imread(os.path.join(filepath,file_))
    im3d[count]=im2d
    count+=1
print(im3d.shape)
kk = im3d.shape
print(kk[1])
io.imsave('D:\\3DUSRebuild\\MyYOLO5\\yolov5\\data\\ThreeModelUS\\final_model.tif',im3d)

由于需要读取和保存图像,因此我们需要import两个模块。
关于代码的具体介绍和思路在代码中了,仔细看吧

其实思想很简单,就实现生成一个固定了维度的矩阵容器。然后整各维度的替换矩阵容器的数据,具体参考下面的代码就明白了上面的思路了

#随机生成一个数组,维度为(2,3,3),即这个高维矩阵中有两个3*3的矩阵
#我们替换2这个维度中的数据
arr1 = np.random.randint(2,4,(2,3,3))
print(arr1)
print('0')
print(arr1[0])
print('1')
print(arr1[1])
brr = np.array([[1,1,1],[1,1,1],[1,1,1]
       ])
print(brr)
arr1[1] = brr
print('11')
print(arr1[1])
print('00')
print(arr1[0])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值