对Python3+gdal 读取tiff格式数据的实例讲解


Posted in Python onDecember 04, 2018

1、遇到的问题:numpy版本

im_data = dataset.ReadAsArray(0,0,im_width,im_height)#获取数据 这句报错

升级numpy:pip install -U numpy 但是提示已经是最新版本

解决:卸载numpy 重新安装

2.直接从压缩包中读取tiff图像

参考:http://gdal.org/gdal_virtual_file_systems.html#gdal_virtual_file_systems_vsizip

当前情况是2层压缩: /'/vsitar/C:/Users/summer/Desktop/a_PAN1.tiff'

3.读tiff

def readTif(fileName):
	
	merge_img = 0
	driver = gdal.GetDriverByName('GTiff')
	driver.Register()
 
	dataset = gdal.Open(fileName)
	if dataset == None:
		print(fileName+ "掩膜失败,文件无法打开")
		return
	im_width = dataset.RasterXSize #栅格矩阵的列数
	print('im_width:', im_width) 
 
	im_height = dataset.RasterYSize #栅格矩阵的行数
	print('im_height:', im_height) 
	im_bands = dataset.RasterCount #波段数
	im_geotrans = dataset.GetGeoTransform()#获取仿射矩阵信息
	im_proj = dataset.GetProjection()#获取投影信息
	
 
	if im_bands == 1:
		band = dataset.GetRasterBand(1)
		im_data = dataset.ReadAsArray(0,0,im_width,im_height) #获取数据
		cdata = im_data.astype(np.uint8)
		merge_img = cv2.merge([cdata,cdata,cdata])
 
		cv2.imwrite('C:/Users/summer/Desktop/a.jpg', merge_img)
# 
	elif im_bands == 4:
	# 	# im_data = dataset.ReadAsArray(0,0,im_width,im_height)#获取数据
	# 	# im_blueBand = im_data[0,0:im_width,0:im_height] #获取蓝波段
	# 	# im_greenBand = im_data[1,0:im_width,0:im_height] #获取绿波段
	# 	# im_redBand = im_data[2,0:im_width,0:im_height] #获取红波段
	# 	# # im_nirBand = im_data[3,0:im_width,0:im_height] #获取近红外波段
	# 	# merge_img=cv2.merge([im_redBand,im_greenBand,im_blueBand])
 
	# 	# zeros = np.zeros([im_height,im_width],dtype = "uint8")
 
	# 	# data1 = im_redBand.ReadAsArray
 
	# 	band1=dataset.GetRasterBand(1)
	# 	band2=dataset.GetRasterBand(2)
	# 	band3=dataset.GetRasterBand(3)
	# 	band4=dataset.GetRasterBand(4)
	
		data1=band1.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #r #获取数据
		data2=band2.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #g #获取数据
		data3=band3.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #b #获取数据
		data4=band4.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #R #获取数据
	# 	print(data1[1][45])
	# 	output1= cv2.convertScaleAbs(data1, alpha=(255.0/65535.0))
	# 	print(output1[1][45])
	# 	output2= cv2.convertScaleAbs(data2, alpha=(255.0/65535.0))
	# 	output3= cv2.convertScaleAbs(data3, alpha=(255.0/65535.0))
 
		merge_img1 = cv2.merge([output3,output2,output1]) #B G R
		
		cv2.imwrite('C:/Users/summer/Desktop/merge_img1.jpg', merge_img1)

4.图像裁剪:

import cv2
import numpy as np
import os
 
tiff_file = './try_img/2.tiff'
save_folder = './try_img_re/'
if not os.path.exists(save_folder):
	os.makedirs(save_folder)
 
tif_img = cv2.imread(tiff_file)
width, height, channel = tif_img.shape
# print height, width, channel : 6908 7300 3
threshold = 1000
overlap = 100
 
step = threshold - overlap
x_num = width/step + 1
y_num = height/step + 1
print x_num, y_num
 
N = 0
yj = 0 
 
for xi in range(x_num):
	for yj in range(y_num):
	# print xi
		if yj <= y_num:
			print yj
			x = step*xi
	  y = step*yj
 
	  wi = min(width,x+threshold)
	  hi = min(height,y+threshold)
	  # print wi , hi
 
	  if wi-x < 1000 and hi-y < 1000:
	  	im_block = tif_img[wi-1000:wi, hi-1000:hi]
 
	  elif wi-x > 1000 and hi-y < 1000:
	  	im_block = tif_img[x:wi, hi-1000:hi]
 
	  elif wi-x < 1000 and hi-y > 1000:
	  	im_block = tif_img[wi-1000:wi, y:hi]
 
	 	else:
	  	im_block = tif_img[x:wi,y:hi]
	  	
	  cv2.imwrite(save_folder + 'try' + str(N) + '.jpg', im_block)
	  N += 1

以上这篇对Python3+gdal 读取tiff格式数据的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
Python与R语言的简要对比
Nov 14 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
手写一个python迭代器过程详解
Aug 27 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
python批量更改目录名/文件名的方法
Apr 18 Python
PyTorch 如何自动计算梯度
May 23 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 #Python
浅谈python下tiff图像的读取和保存方法
Dec 04 #Python
对python3新增的byte类型详解
Dec 04 #Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 #Python
python 实现数字字符串左侧补零的方法
Dec 04 #Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 #Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 #Python
You might like
phpinfo 系统查看参数函数代码
2009/06/05 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
vue实现计算器功能
2020/02/22 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
使用python实现省市三级菜单效果
2016/01/20 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
pygame实现五子棋游戏
2019/10/29 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
小学生红领巾广播稿
2014/01/21 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
工程承诺书怎么写
2014/05/24 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
英文商务邀请函范文
2015/01/31 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
推广普通话的宣传语
2015/07/13 职场文书
2016年元旦寄语
2015/08/17 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技