问题描述

已有数据:1张大范围的遥感影像和1张裁剪为同一大小的shp数据
使用工具:ArcPy
实现目标:
1.shp数据按照属性分块输出
2.使用shp数据批量裁剪遥感影像,将影像裁剪为小块的tif图像
3.将tif转为jpg,并调整为同一大小

遇到的问题:

使用shp裁剪完的tif图像由原来的8位变为16位,直接打开是黑色的,转为jpg也是黑色,后续读取、处理图片都受影响。

查了如何将16位转为8位的代码,都没有解决问题,最终发现arcgis工具中有一个“复制栅格”可以实现将16位的栅格图像输出为8位栅格图像,查找官方文档,使用 arcpy.CopyRaster_management函数,在参数中设置输出的像素深度为 "8_BIT_UNSIGNED"即可实现这一功能。(在这里也遇到了一个坑,使用arcpy.CopyRaster_management函数时,显示arcgisscripting.ExecuteError: ERROR 999999: 执行函数时出错。 尚未配置栅格存储。将相对路径改为完整路径即可)


完整过程:

import arcpy
import io
import pandas as pd
import numpy as np
import cv2
import re
from arcpy import env
from arcpy.sa import *
from skimage import io
import os
import numpy as np
from PIL import Image
import glob
import tifffile as tif'''
数据分割
'''
# function for replace special characters
def validateTitle(title):rstr = r"[\/\\\:\*\?\"\<\>\|\,\.\ ]" new_title = re.sub(rstr, "_", title)  return new_titleenv.workspace = 'D:/test/split'
in_features = "D:/test/split/shp/clippart3.shp" #要分块的shp
rows = arcpy.SearchCursor(in_features, fields="labelnum") # 属性字段for row in rows:selected_field_value = row.getValue("labelnum")where_clause = '"labelnum" = \'%s\''%(str(selected_field_value))outfilename = validateTitle(str(selected_field_value))out_feature_class = "D:/test/split/single/%s.shp"%(outfilename)#输出路径arcpy.Select_analysis(in_features, out_feature_class, where_clause)print(str(selected_field_value)+' has done!!!')
'''
用shp批量裁剪tif
'''
arcpy.CheckOutExtension("Spatial")
arcpy.env.workspace = "D:/test/split/single"
arcpy.env.overwriterOutput = Trueoutfiles = "D:/test/split/singletif"#输出路径
infiles = "D:/test/split/tif/part3.tif"#要裁剪的tif
clipfiles = arcpy.ListFiles("*.shp")for filename in clipfiles:print("Processing:" + filename)clipputfiles = arcpy.env.workspace + "/" + filenameoutputfiles = outfiles + "/" + filename[:-4]outExtractByMask = ExtractByMask(infiles, clipputfiles)outExtractByMask.save(outputfiles + ".tif")
print "***OVER***"
print arcpy.GetMessages()'''
复制栅格,转为8位jpg
'''
arcpy.env.workspace = "D:/test/split/single"
path = "D:/test/split/singletif"#输入栅格路径
filelist = os.listdir(path)
for file in filelist:if file.endswith(".tif"):arcpy.CopyRaster_management("D:/test/split/singletif/"+file,"D:/test/split/singlejpg/"+file[:-4]+".jpg","DEFAULTS","0","","","","8_BIT_UNSIGNED")'''
缩放至同一大小
'''
def resize(old_path, new_path, size, resample):"""通过指定的resample方式调整old_path下所有的jpg图片为指定的size,并保存到new_path下"""if os.path.isdir(old_path):for child in os.listdir(old_path):if child.endswith(".jpg"):if child.find('.jpg') > 0:im = Image.open(old_path + child)im_resized = im.resize(size=size, resample=resample)if not os.path.exists(new_path):os.makedirs(new_path)print(child, 'resize successfully!')im_resized.save(new_path + child, im.format)child_path = old_path + child + '/'resize(child_path, new_path, size, resample)if __name__ == "__main__":old_path = 'D:/test/split/singlejpg/'#输入jpg路径new_path = 'D:/test/split/singlescale/'#输出缩放后的路径size = (256, 256)resample = Image.BILINEAR # 使用线性插值法重采样resize(old_path, new_path, size, resample)

提示:如果用shp数据裁剪栅格图像时,裁剪出的图像是矩形而不是shp文件的边界,将待裁剪的栅格图像nodata值设置为空值即可解决。

暂时就写这么多啦,做个简单的记录,有问题可以在评论区留言。

使用SHP数据批量裁剪TIF图像并转为JPG格式相关推荐

  1. 使用shp数据批量裁剪栅格数据并统计均值

    批量实现利用shp文件,裁剪相应的多个栅格数据,并统计裁剪后栅格的均值至TXT文件,亲测可用. #使用shp数据批量裁剪栅格数据并统计均值 # -*- coding: cp936 -*- #使用shp ...

  2. 裁剪TIF图像,代码简单,易懂(Arcpy)

    可能或多或少会用到研究区域裁剪,但是用Python裁剪我总觉得还是有点麻烦! Arcgis作为我们常用来使用看图片的(当然,他的空间分析什么功能还是很强大的,只不过我不怎么用得到),如果只是用来看图片 ...

  3. 如何批量将 Excel 文档转为 Csv 格式

    概要:CSV 称为逗号分隔值,其文件以纯文本形式存储表格数据(数字和文本),而熟悉 Excel 的小伙伴应该也知道 Excel 也是存储表格数据,只不过 Excel 不仅支持文本,还支持图片.视频等多 ...

  4. 如何批量将 Word 文档转为 HTML 格式

    概要:HTML 的全称为超文本标记语言,是一种标记语言.我们可以将所需要表达的信息按某种规则写成 HTML 文件,这样可以通过专用的软件来识别,比如常用的浏览器.这些软件可以将这些 HTML 文件&q ...

  5. 如何批量将 Word 文档转为 ePub 格式

    概要:ePub 是一个自由的开放标准,属于一种可以"自动重新编排"的内容,也就是文字内容可以根据阅读设备的特性,以最适于阅读的方式显示,所以现在主流的电子书基本都是 ePub 的. ...

  6. Shp数据批量导入Postgresql工具的原理和设计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在制作整体的开源工具箱产品中,数据入库是一个重要的环节.虽然 ...

  7. MODIS数据批量裁剪并合成月尺度数据:以MOD13A1为例

    1 excel表里列举全部[栅格计算器] 指令. 其中MODIS文件名可利用python代码全部输出 代码(注意更改路径): import os import glob path = "E: ...

  8. python读取dicom格式的图像并转为png格式

    使用网上的大多数格式转换过来图像失真过于严重,出现了这种情况: 而原始图像是: 读取的过程中直接变成了二值图,所以就先对读取到的原始像素矩阵做归一化,在*255变为灰度图,代码如下: import S ...

  9. 如何批量将 Excel 文档转为 Svg 格式

    概要:SVG 是一种图形文件格式,它的全称可缩放的矢量图形,这种图形格式跟我们平时拍照的图片格式是有不一样的,我们平时拍的照片,如果放大到一定的程度都会变得模糊不清.但是 SVG 这种矢量图形格式是可 ...

最新文章

  1. 周鸿祎重做路由器,到底在做什么?
  2. Lotgstash日志切割示例
  3. TThread深入分析
  4. arcgis 卸载和注册表相关总结
  5. 解读MySQL 8.0新特性:Skip Scan Range
  6. 安装Docker的三种方式
  7. pycharm加速安装python包的速度
  8. 支持断线重连、永久watcher、递归操作 ZooKeeper 客户端
  9. 用动画切换按钮的状态
  10. python语音库_Python中的Python文本到语音
  11. RAC静默安装与DG搭建
  12. Linux 命令(141)—— nmap 命令
  13. 图像的一维熵和二维熵
  14. jar包导入本地maven仓库
  15. 为什么计算机的游戏打开不了,为什么电脑桌面游戏菜单打不开
  16. 魅族手机无信号无服务器,魅族手机没有信号的解决教程
  17. css字间距 与 Photoshop里字间距关系
  18. 【IE知识】最系统、完整的标准工时学习资料;标准作业(SOP)详解;生产线布局规划
  19. 安装域、对域进行管理
  20. EasyRecovery16支持恢复文档表格图片音视频等各种不同的数据

热门文章

  1. 17福师计算机在线作业,17秋福师《计算机应用基础》在线作业一.doc
  2. 微信H5移动端真机调试--vConsole
  3. WPF绑定(Binding)绑定对象集合修改显示属性问题
  4. 无心剑中译拜伦诗4首
  5. s3 java sdk_s3javasdk文档.pdf
  6. 强势Mac机网站设计软件:10大最佳HTML编辑器
  7. 种子轮、天使轮等相关知识
  8. java jsp 传值_jsp页面间的传值方法
  9. fme使用workspacerunner批量处理数据
  10. 银行排队系统的设计与实现(源代码)