首页 > 编程语言 >Python|使用Python实现png格式文件转tif格式文件

Python|使用Python实现png格式文件转tif格式文件

时间:2022-09-04 11:58:36浏览次数:73  
标签:Python dataset 格式文件 im proj tif height data

一、TIF/TIFF介绍

标签图像文件格式Tag Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像,是一种常见的遥感影像存储格式。

二、代码实现

  要实现PNG文件转TIF文件,有一个问题需要注意,TIF文件中是存有坐标系等地理信息的·,而PNG文件中是不存有这样的信息的,因此我们需要从另外的TIF文件中获取坐标系等信息,理解这个问题之后就比较好实现了,代码如下:

from osgeo import gdal
import os
import numpy as np
import cv2

'''
input:原图的tif文件和预测的单通道png图像
out:合成新的tif,带有坐标信息
'''


class GRID:

	# 读图像文件
	def read_img(self, filename):
		dataset = gdal.Open(filename)  # 打开文件

		im_width = dataset.RasterXSize  # 栅格矩阵的列数
		im_height = dataset.RasterYSize  # 栅格矩阵的行数

		im_geotrans = dataset.GetGeoTransform()  # 仿射矩阵
		im_proj = dataset.GetProjection()  # 地图投影信息
		im_data = dataset.ReadAsArray(0, 0, im_width, im_height)  # 将数据写成数组,对应栅格矩阵

		del dataset  # 关闭对象,文件dataset
		return im_proj, im_geotrans, im_data, im_width, im_height

	# 写文件,以写成tif为例
	def write_img(self, filename, im_proj, im_geotrans, im_data):

		# 判断栅格数据的数据类型
		if 'int8' in im_data.dtype.name:
			datatype = gdal.GDT_Byte
		elif 'int16' in im_data.dtype.name:
			datatype = gdal.GDT_UInt16
		else:
			datatype = gdal.GDT_Float32

		# 判读数组维数
		if len(im_data.shape) == 3:
			im_bands, im_height, im_width = im_data.shape
		else:
			im_bands, (im_height, im_width) = 1, im_data.shape

		# 创建文件
		driver = gdal.GetDriverByName("GTiff")  # 数据类型必须有,因为要计算需要多大内存空间
		dataset = driver.Create(filename, im_width, im_height, im_bands, datatype)

		dataset.SetGeoTransform(im_geotrans)  # 写入仿射变换参数
		dataset.SetProjection(im_proj)  # 写入投影

		if im_bands == 1:
			dataset.GetRasterBand(1).WriteArray(im_data)  # 写入数组数据
		else:
			for i in range(im_bands):
				dataset.GetRasterBand(i + 1).WriteArray(im_data[i])

		del dataset


if __name__ == "__main__":
	os.chdir(r'./data')  # 切换路径到待处理图像所在文件夹
	run = GRID()
	# 第一步
	proj, geotrans, data1, row1, column1 = run.read_img('pic_2.tif')  # 读数据,获取tif图像的信息

	img_path = 'pic_2.png'  # 读取png图像数据
	data2 = cv2.imread(img_path, -1)

	data = np.array((data2), dtype=data1.dtype)  # 数据格式

	run.write_img('pic_2_tif.tif', proj, geotrans, data)  # 生成tif

 

标签:Python,dataset,格式文件,im,proj,tif,height,data
From: https://www.cnblogs.com/tangjielin/p/16597354.html

相关文章

  • Python中的石头剪刀布游戏
    Python中的石头剪刀布游戏继续阅读WordPress继续阅读知乎版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明本文链接:https:/......
  • Python|使用Python实现按掩膜提取
    使用GDAL中的Warp函数实现了ArcGIS中的按掩膜提取功能,直接上代码:fromosgeoimportgdalinput_raster=r""#输入栅格路径#orasanalternativeiftheinputisa......
  • Python|使用Python实现tif文件转shpfile格式文件
    前言遥感图像像素级别分类(语义分割)结果是栅格图像,转成矢量shp更方便在arcgis中自定义展示(比如只显示目标边框)以及进一步分析(比如缓冲区分析)。代码实现因为分类结......
  • Python内置函数-isinstance() 函数详解
    描述isinstance()函数来判断一个对象是否是一个已知的类型,类似type()。isinstance()与type()区别:type()不会认为子类是一种父类类型,不考虑继承关系。is......
  • python小知识--使用pip/pip3 install 命令下载安装包时,速度慢、经常断连的情况
    直接提供方法设置源 WIN+R键cmd命令 执行如下两条命令----------------这使用国内的云pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/sim......
  • 使用 Python 改善您的交易
    使用Python改善您的交易Photoby奥斯汀蓟on不飞溅Python是一种具有多种应用程序的编程语言。特别是对于交易、分析、回测……它是你能找到的最好的语言之一。确......
  • Python机器学习-多元分类的5种模型
    Python机器学习-多元分类的5种模型最近上了些机器学习的课程,于是想透过Kaggle资料集来练习整个资料科学专案的流程,在模型训练阶段,虽然听过许多分类模型,但不是很了解其各别......
  • Python 中的命名空间、变量和范围
    Python中的命名空间、变量和范围什么是命名空间?首先,我们需要感知python中的名称(标识符)是什么。众所周知,在python中,一切都是对象。名称帮助我们访问底层对象。例如,当我们......
  • python3之35个关键字详解
    一、python35个关键字列举:help("keywords")查看运行结果:1.and、or、not2.if、elif、else3.for、while4.True、False5.continue、break6.pass7.try、except、f......
  • Python实现XMind测试用例快速转Excel用例
    转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/c2d10f21.html你好,我是测试蔡坨坨。今天分享一个Python编写的小工具,实现XMind测试用例转Excel用例。前言XMi......