对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遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
关于Django外键赋值问题详解
Aug 13 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
python实现聚类算法原理
Feb 12 Python
python批量获取html内body内容的实例
Jan 02 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 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静态类的原罪详解
2013/05/06 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
js的写法基础分析
2011/01/17 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
Python global全局变量函数详解
2018/09/18 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
高级Java程序员面试要点
2013/08/02 面试题
留学自荐信的技巧
2013/10/17 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
大三毕业自我鉴定
2014/01/15 职场文书
社区综治工作汇报
2014/10/27 职场文书
课外活动总结
2015/02/04 职场文书
埃及王子观后感
2015/06/16 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书