对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 相关文章推荐
python搜索指定目录的方法
Apr 29 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
python中安装模块包版本冲突问题的解决
May 02 Python
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
python八大排序算法速度实例对比
Dec 06 Python
Python基础教程之异常详解
Jan 10 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
python3实现弹弹球小游戏
Nov 25 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 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
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
Django 解决由save方法引发的错误
2020/05/21 Python
python os.rename实例用法详解
2020/12/06 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
留学推荐信中文范文三篇
2014/01/25 职场文书
服装店营销方案
2014/03/10 职场文书
《金子》教学反思
2014/04/13 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
聘用合同范本
2015/09/21 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书