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

资讯详情

深度解读 · 专业分析

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

最新资讯

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

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

📅 发布时间:2026/6/18 6:08:50 👁 浏览次数:
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/6/18 6:08:07 查看详情
实用指南:轻量化 + 绿色部署的日志监控系统log-monitor设计思路(一)

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

2026/6/18 4:42:58 查看详情
随机链表的复制-leetcode

随机链表的复制-leetcode

2026/6/17 18:36:37 查看详情
不止桌面无线充!全品类Qi认证适配方案,覆盖多场景产品

不止桌面无线充!全品类Qi认证适配方案,覆盖多场景产品

2026/6/18 6:05:52 查看详情
微信评比投票怎么弄?微信投票评选怎么弄,云帆投票+西瓜评选+腾讯投票,全场景对比测评 - 投票小程序

微信评比投票怎么弄?微信投票评选怎么弄,云帆投票+西瓜评选+腾讯投票,全场景对比测评 - 投票小程序

2026/6/18 6:05:52 查看详情
DeepTutor:智能体原生个性化辅导的完整实用指南

DeepTutor:智能体原生个性化辅导的完整实用指南

2026/6/18 6:05:52 查看详情
MLOps建模重构:从模型中心到数据契约的范式迁移

MLOps建模重构:从模型中心到数据契约的范式迁移

2026/6/18 6:05:52 查看详情
DBSCAN密度聚类实战:从原理到调参与噪声价值挖掘

DBSCAN密度聚类实战:从原理到调参与噪声价值挖掘

2026/6/18 6:05:51 查看详情
51单片机串口通信实操包:Keil工程+串口助手配置图+可烧录hex文件

51单片机串口通信实操包:Keil工程+串口助手配置图+可烧录hex文件

2026/6/18 6:03:40 查看详情
在Android设备上运行完整Linux系统:proot-distro的魔法与实用指南

在Android设备上运行完整Linux系统:proot-distro的魔法与实用指南

2026/6/18 0:01:28 查看详情
ZigBee ZCL事件驱动与基础簇实战:从原理到健壮设备开发

ZigBee ZCL事件驱动与基础簇实战:从原理到健壮设备开发

2026/6/18 0:01:28 查看详情
时间序列分解实战指南:趋势、季节性与残差的工程化解读

时间序列分解实战指南:趋势、季节性与残差的工程化解读

2026/6/18 0:01:28 查看详情
从Landsat到高分系列:手把手教你选择适合自己项目的遥感卫星数据

从Landsat到高分系列:手把手教你选择适合自己项目的遥感卫星数据

2026/6/17 16:21:19 查看详情
福州空调维修上门加氟移机空调不制冷、推荐本地老牌鑫盛达、冷顺安 - 我叫一

福州空调维修上门加氟移机空调不制冷、推荐本地老牌鑫盛达、冷顺安 - 我叫一

2026/6/17 16:06:28 查看详情
嵌入式调试器组件化界面与拖拽交互技术详解

嵌入式调试器组件化界面与拖拽交互技术详解

2026/6/17 16:15:44 查看详情
YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

2026/6/17 21:10:37 查看详情
E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

2026/6/17 21:10:30 查看详情
深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

2026/6/17 21:06:50 查看详情

关于尧图

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

快速链接

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

服务项目

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

联系方式

电话:400-XXX-XXXX

邮箱:info@zskr.cn

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

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