对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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
python使用7z解压软件备份文件脚本分享
Feb 21 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
python获取地震信息 微信实时推送
Jun 18 Python
python实现连连看辅助(图像识别)
Mar 25 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 Python
python实现股票历史数据可视化分析案例
Jun 10 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 header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
详解json在php中的应用
2018/09/30 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
python获取一组汉字拼音首字母的方法
2015/07/01 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
Linux中如何用命令创建目录
2015/01/12 面试题
颁奖典礼主持词
2014/03/25 职场文书
支部组织生活会方案
2014/06/10 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Apache自带的ab压力测试工具的实现
2022/07/23 Servers