RGB TIF到GeoTIF并删除背景色

如何解决RGB TIF到GeoTIF并删除背景色

我已经使用matplotlib python三角函数创建了tif图像,现在需要将tif更改为带有epsg4326投影的goetiff,并移除背景,仅需要补丁。

我面临什么困难: 1-投影变化发生不正确。 2像素值应为z参数值。 3-仅是我不想的整个拉特朗区域的片段。

代码:- 1-用于在下面创建matplotlib三角tiff代码

#MAKING TIFF FILE USING TRIANGULARION MATPLOTLIB.
import matplotlib.tri as mtri
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def plot():

        x=np.random.uniform(70,94,74)
        y=np.random.uniform(8,22,74)

        # A selected triangulation of the points.
        triangles = np.asarray([
            [67,66,1],[65,2,66],[1,2],[64,65],[63,3,64],[60,59,57],[2,64,3],[3,63,4],[0,67,[62,4,63],[57,56],[59,58,[61,60,69],69,60],[4,62,68],[6,5,9],68,62],[69,61],[9,70],8,7],70,5],[8,6,[56,56,52],[70,10,[54,53,55],55,53],[68,[52,[11,12],71,13,[10,13],[51,50,[13,71],[12,[71,52,50],14,[50,49,[49,48,[14,16,15],48],[17,19,18],20,19],[48,14],47,16],[47,46,[16,45],[23,24],[21,24,22],[20,17,25,[27,26,28],72,21],[25,21,72],[45,20],28,26],[44,73,[72,45,73],[28,29],[29,31],[43,44],[73,43,40],39],31,25],[42,40,43],[31,30,[39,41,33,[32,33],38,[33,38],34],[37,35,[34,35],[35,37,36]])
        z = np.random.uniform(0.5,74)

        triang = mtri.Triangulation(x,y,triangles=triangles)
        print("type(triang):",triang)
        print("type(z):",type(z))

        ax=plt.tripcolor(triang,z,vmin=0,vmax=2)
        ax
        plt.savefig("ax.tif")
        plt.show(ax)
        
plot()

2-用tif投影制作Geotiff

from osgeo import gdal,osr
import numpy,gdal

ds = gdal.Open('ax.tif')
band = ds.GetRasterBand(1)
myarray = numpy.array(band.ReadAsArray())
convert=lambda x:x*(0.0124796)

myarray=convert(myarray)

#print("myarray:",myarray)
selection = numpy.logical_or(myarray >= 3.5,myarray <= 7)

new_array = [ [0 for i in range(band.XSize)] for j in range(band.YSize)]

for i,item in enumerate(myarray):
    for j,element in enumerate(item):
        if selection[i][j] == True:
            new_array[i][j] = myarray[i][j]
        else:
            new_array[i][j] = -999
            if new_array[i][j]==3.182298:
                new_array[i][j] = -999
                
            

geotransform = ds.GetGeoTransform()
wkt = ds.GetProjection()

# Create gtif file
driver = gdal.GetDriverByName("GTiff")
output_file = "ax_geotiff.tif"

dst_ds = driver.Create(output_file,band.XSize,band.YSize,1,gdal.GDT_Float64)

new_array = numpy.array(new_array)


print(type(new_array[i]))

#new_array[i]=new_array.max())
    
    
    

#transformed_arr = np.where(arr<5,arr*10,0)
#new_array=numpy.where(new_array[i]==new_array.max(),-999,new_array)
print("new_array:",new_array)
#writting output raster
dst_ds.GetRasterBand(1).WriteArray( new_array )
#setting nodata value
dst_ds.GetRasterBand(1).SetNoDataValue(-999)
#setting extension of output raster
# top left x,w-e pixel resolution,rotation,top left y,n-s pixel resolution
dst_ds.SetGeoTransform(geotransform)
# setting spatial reference of output raster

srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
#srs = osr.SpatialReference()
#srs.ImportFromWkt(wkt)
dst_ds.SetProjection( srs.ExportToWkt() )
#Close output raster dataset

ds = None
dst_ds = None

print(numpy.unique(new_array))

3-绘制Geotiff

#CHECKING THE TIFF FILE / ANALYSING THE TIFF FILE DATA AND PLOT.
#tttraster_geotiff

import gdal
%matplotlib inline
import rasterio
from matplotlib import pyplot
import numpy 

ds = gdal.Open('ax_geotiff.tif')
band = ds.GetRasterBand(1)
myarray = numpy.array(band.ReadAsArray())
print(myarray)

pyplot.imshow(myarray,cmap='pink')

pyplot.show()

##上面是我正在使用的示例数据和代码,但是我没有得到正确的epsg 4326投影,如果我选择cmap ='jet',则我的背景色为geottiff蓝色,即将出现,即geotiff图的蓝色很大一部分表示z参数的mav值,如果我更改为np.nan则为蓝色,则ia看不到其他颜色,

那么我必须做的所有修改都是- 1-正确的投影 2-仅删除蓝色作为难处理的颜色。enter image description here enter image description here 3-想要删除那种红色(z变量的最大值),只有我想要的地图。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-