对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的常见命令注入威胁
Feb 18 Python
python pdb调试方法分享
Jan 21 Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
详解Python编程中包的概念与管理
Oct 16 Python
Python实现购物系统(示例讲解)
Sep 13 Python
python用插值法绘制平滑曲线
Feb 19 Python
python使用matplotlib绘制雷达图
Oct 18 Python
Python多线程通信queue队列用法实例分析
Mar 24 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 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 数组二分法查找函数代码
2010/02/16 PHP
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
帝国cms常用标签汇总
2015/07/06 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
python中使用%与.format格式化文本方法解析
2017/12/27 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
对python多线程与global变量详解
2018/11/09 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
python实现移动木板小游戏
2020/10/09 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
实习指导老师评语
2014/04/26 职场文书
音乐节策划方案
2014/06/09 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
辩护词范文大全
2015/05/21 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js