对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实现在windows下操作word的方法
Apr 28 Python
Python 爬虫的工具列表大全
Jan 31 Python
python实现kNN算法
Dec 20 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
Python中的函数作用域
May 07 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
pytorch训练imagenet分类的方法
Jul 27 Python
python实现一组典型数据格式转换
Dec 15 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
php生成curl命令行的方法
2015/12/14 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
简单通用的JS滑动门代码
2008/12/19 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
Python生成pdf文件的方法
2014/08/04 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
J2EE是技术还是平台还是框架
2016/08/14 面试题
社区包粽子活动方案
2014/01/21 职场文书
1亿有多大教学反思
2014/05/01 职场文书
项目合作意向书模板
2014/07/29 职场文书
农村文化建设标语
2014/10/07 职场文书
义卖募捐活动总结
2015/05/09 职场文书
主持人开场白台词
2015/05/29 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android