对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 相关文章推荐
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
对Django外键关系的描述
Jul 26 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
python 实现绘制整齐的表格
Nov 18 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
Jul 28 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
PHP 输出缓存详解
2009/06/20 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
Django开发的简易留言板案例详解
2018/12/04 Python
Python字典的核心底层原理讲解
2019/01/24 Python
python画图的函数用法以及技巧
2019/06/28 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
利用python进行文件操作
2020/12/04 Python
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
自荐书模板
2013/12/19 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
MySQL约束超详解
2021/09/04 MySQL