尧图网络科技 Logo 尧图网络科技
  • 首页
  • 关于我们
  • 建站服务
  • UI 设计
  • 案例展示
  • SEO 优化
  • 资讯中心
  • 联系我们

资讯详情

深度解读 · 专业分析

  • 首页
  • 资讯中心
  • /
  • Python 实现对遥感影像根据DN值上色

最新资讯

  • 全部资讯
  • 行业动态
  • UI 设计
  • SEO 优化
  • 网站开发

Python 实现对遥感影像根据DN值上色

📅 发布时间:2026/8/15 17:41:42 👁 浏览次数:
Python 实现对遥感影像根据DN值上色

Python 实现对遥感影像根据DN值上色

import os
import re
import glob
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import rasterio
from rasterio.plot import plotting_extent
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from matplotlib.ticker import FuncFormatter
from pyproj import Transformer
import pyproj

======== PROJ 路径 ========

os.environ["PROJ_LIB"] = pyproj.datadir.get_data_dir()

======== 全局字体样式设置 ========

mpl.rcParams['font.family'] = 'Times New Roman'
mpl.rcParams['font.size'] = 10.5
mpl.rcParams['font.weight'] = 'bold'
mpl.rcParams['axes.labelweight'] = 'bold'
mpl.rcParams['axes.titleweight'] = 'bold'
mpl.rcParams['axes.titlesize'] = 10.5
mpl.rcParams['axes.labelsize'] = 10.5
mpl.rcParams['legend.fontsize'] = 10.5
mpl.rcParams['xtick.labelsize'] = 10.5
mpl.rcParams['ytick.labelsize'] = 10.5
mpl.rcParams['font.style'] = 'normal'

def deg_to_dms(deg):
sign = "-" if deg < 0 else ""
deg = abs(deg)
d = int(deg)
m_float = (deg - d) * 60
m = int(m_float)
s = (m_float - m) * 60
return f"{sign}{d}°{m}′{s:0.0f}″"

def plot_smc_one(tif_path, out_png, n):
cmap_name = "Spectral"

with rasterio.open(tif_path) as src:data = src.read(1)extent = plotting_extent(src)src_crs = src.crsnodata = src.nodata# 掩膜和裁剪
if nodata is not None:data = np.ma.masked_equal(data, nodata)
data = np.clip(data, 0, 1.0)xmin, xmax, ymin, ymax = extentfig, ax = plt.subplots(figsize=(10, 5))im = ax.imshow(data,extent=extent,origin="upper",cmap=cmap_name,vmin=0,vmax=0.5,
)# 如果是投影坐标,转成经纬度用来生刻度
if src_crs is not None and not src_crs.is_geographic:transformer = Transformer.from_crs(src_crs, "EPSG:4326", always_xy=True)lon_min, lat_min = transformer.transform(xmin, ymin)lon_max, lat_max = transformer.transform(xmax, ymax)x_ticks_lon = np.linspace(lon_min, lon_max, 6)y_ticks_lat = np.linspace(lat_min, lat_max, 5)# 把经纬度刻度反投影回原坐标xtick_pos = [transformer.transform(lon, lat_min, direction="INVERSE")[0]for lon in x_ticks_lon]ytick_pos = [transformer.transform(lon_min, lat, direction="INVERSE")[1]for lat in y_ticks_lat]ax.set_xticks(xtick_pos)ax.set_yticks(ytick_pos)def fmt_x(x, pos):lon, _ = transformer.transform(x, ymin, direction="FORWARD")return deg_to_dms(lon) + "E"def fmt_y(y, pos):_, lat = transformer.transform(xmin, y, direction="FORWARD")return deg_to_dms(lat) + "N"ax.xaxis.set_major_formatter(FuncFormatter(fmt_x))ax.yaxis.set_major_formatter(FuncFormatter(fmt_y))
else:x_ticks = np.linspace(xmin, xmax, 6)y_ticks = np.linspace(ymin, ymax, 5)ax.set_xticks(x_ticks)ax.set_yticks(y_ticks)ax.xaxis.set_major_formatter(FuncFormatter(lambda x, pos: deg_to_dms(x) + "E"))ax.yaxis.set_major_formatter(FuncFormatter(lambda y, pos: deg_to_dms(y) + "N"))# 四周留白
margin_x = (xmax - xmin) * 0.1
margin_y = (ymax - ymin) * 0.1
ax.set_xlim(xmin - margin_x, xmax + margin_x)
ax.set_ylim(ymin - margin_y, ymax + margin_y)# 图框
for spine in ax.spines.values():spine.set_edgecolor("black")spine.set_linewidth(2)# 左下角小色带
cax = inset_axes(ax,width="2%",height="30%",loc="lower left",bbox_to_anchor=(0.02, 0.06, 1, 1),bbox_transform=ax.transAxes,borderpad=0,
)
cb = plt.colorbar(im, cax=cax, orientation="vertical")
cb.ax.tick_params(labelsize=6)# 安全地改最后一个刻度为 >0.5
ticks = cb.get_ticks()
tick_labels = [f"{t:.2f}" for t in ticks]
if tick_labels:tick_labels[-1] = ">0.5"
cb.set_ticks(ticks)
cb.set_ticklabels(tick_labels)# 标题
ax.set_title(f"SMCRetrievalN={n}.tif", pad=10)# 不用 tight_layout,改用手动调
plt.subplots_adjust(left=0.04, right=0.99, top=0.92, bottom=0.04)# 保存前先渲染,避免 _get_renderer
fig.canvas.draw()
fig.savefig(out_png, dpi=300)   # 不要 bbox_inches="tight"
plt.close(fig)

================= 批量部分 =================

root_dir = r""
out_dir = r""
os.makedirs(out_dir, exist_ok=True)

tif_paths = [
f for f in glob.glob(os.path.join(root_dir, "SMCRetrievalN=*.tif"))
if re.search(r"N=\d+", os.path.basename(f))
]

for tif_path in tif_paths:
n_value = re.search(r"N=(\d+)", os.path.basename(tif_path)).group(1)
out_png = os.path.join(out_dir, f"SMCRetrievalN={n_value}.png")
plot_smc_one(tif_path, out_png=out_png, n=n_value)

相关新闻

【免费】MySQL自动化运维工具,一键生成WORD和EXCEL

【免费】MySQL自动化运维工具,一键生成WORD和EXCEL

2026/8/9 5:42:42 查看详情
实用指南:轻量化 + 绿色部署的日志监控系统log-monitor设计思路(一)

实用指南:轻量化 + 绿色部署的日志监控系统log-monitor设计思路(一)

2026/8/14 12:31:13 查看详情
随机链表的复制-leetcode

随机链表的复制-leetcode

2026/8/14 12:44:45 查看详情
679345

679345

2026/8/15 17:38:51 查看详情
Windows热键冲突检测终极指南:用hotkey-detective热键侦探揪出偷走快捷键的进程

Windows热键冲突检测终极指南:用hotkey-detective热键侦探揪出偷走快捷键的进程

2026/8/15 17:37:26 查看详情
md2wechat-skill 环境配置完全指南:从安装到使用的一站式教程

md2wechat-skill 环境配置完全指南:从安装到使用的一站式教程

2026/8/15 17:35:51 查看详情
如何让AI前端设计彻底告别模板脸?Taste-Skill 完整上手指南

如何让AI前端设计彻底告别模板脸?Taste-Skill 完整上手指南

2026/8/15 17:34:49 查看详情
微信公众号数据采集全攻略:用Python快速搭建公众号文章爬虫

微信公众号数据采集全攻略:用Python快速搭建公众号文章爬虫

2026/8/15 17:34:49 查看详情
探索Dramatic EDitor的着色器系统:打造个性化编辑器视觉风格

探索Dramatic EDitor的着色器系统:打造个性化编辑器视觉风格

2026/8/15 17:34:49 查看详情
一分钟看懂:区域平均数据 vs 单点网格数据区别

一分钟看懂:区域平均数据 vs 单点网格数据区别

2026/8/15 0:01:02 查看详情
从IT运维角度聊聊东莞复印机租赁的选型问题

从IT运维角度聊聊东莞复印机租赁的选型问题

2026/8/15 0:01:50 查看详情
上海君澜律师事务所孙青律师团队——上海房产分割诉讼业务介绍 - 孙青律师13681945561

上海君澜律师事务所孙青律师团队——上海房产分割诉讼业务介绍 - 孙青律师13681945561

2026/8/15 0:01:50 查看详情
[具身智能-806]:全自主移动机器人完整链路解析:从AI导航决策到机械运动落地的分层工作原理。

[具身智能-806]:全自主移动机器人完整链路解析:从AI导航决策到机械运动落地的分层工作原理。

2026/8/15 7:11:38 查看详情
单臂路由技术解析与VLAN间通信实战

单臂路由技术解析与VLAN间通信实战

2026/8/15 7:12:15 查看详情
Netty带宽饱和场景下的连接处理优化方案

Netty带宽饱和场景下的连接处理优化方案

2026/8/15 9:25:36 查看详情
飞书AI团队协作效能评估报告(2024Q2独家数据):TOP10企业已启用「AI协作健康度」仪表盘

飞书AI团队协作效能评估报告(2024Q2独家数据):TOP10企业已启用「AI协作健康度」仪表盘

2026/8/14 7:48:25 查看详情
当AI成为你的专属音乐制作人:SongGeneration如何重塑创作边界

当AI成为你的专属音乐制作人:SongGeneration如何重塑创作边界

2026/8/14 18:07:26 查看详情
回收苹果手机哪个平台靠谱?从资质到报价全维度测评 - 甄选测评馆

回收苹果手机哪个平台靠谱?从资质到报价全维度测评 - 甄选测评馆

2026/8/15 4:23:58 查看详情

关于尧图

立足北京本地的一站式网站建设服务与设计教学平台,深耕企业网站定制开发、全网 SEO 优化及网络推广服务。

快速链接

  • 关于我们
  • 建站服务
  • 案例展示
  • 资讯中心

服务项目

  • 企业官网定制
  • UI 界面设计
  • SEO 优化推广
  • 移动端适配

联系方式

电话:400-XXX-XXXX

邮箱:info@zskr.cn

地址:北京市朝阳区 XXX 路 XX 号

© 2026 尧图网络科技 版权所有 | 京 ICP 备 XXXXXXXX 号