从 os.path 转向 pathlib 是 Python 开发中的一个重要升级。虽然 os.path 已经服务了我们很多年,但 pathlib(自 Python 3.4 引入)采用了面向对象的设计,让代码从“字符串拼接”变成了“逻辑操作”,显著提升了代码的可读性和可维护性。
老实说,我在日常工作中,使用os.path更多,但是有必要学习一下pathlib,于是有了这篇文章。这也方便小白日后学习、查询。
以下是从 os.path 过渡到 pathlib 的核心指南。
1. 核心哲学:字符串 vs 对象os.path: 将路径视为字符串。你需要不断调用函数并传入这些字符串。
pathlib: 将路径视为对象。路径本身拥有属性(文件名、后缀)和方法(合并、移动、读取)。
基础导入:
import os
from pathlib import Path
2. 常用操作对照表这是最直观的迁移参考,涵盖了 90% 的日常使用场景。
操作类型
os.path / os
pathlib (Path 对象)
获取当前工作目录
os.getcwd()
Path.cwd()
当前用户 ...
在 GIS 开发中,我们经常需要从 Shapefile 或其他矢量文件中提取属性表的唯一值。今天分享一个简单的 Python 函数,使用 GDAL 的 OGR 模块来实现这个功能。
函数 get_names_from_vector 接收矢量文件路径和字段名作为参数。它首先打开文件,检查字段是否存在,然后遍历所有要素,收集唯一值到集合中。代码中加入了打印语句,便于调试。
这个小工具特别适合批量处理地理数据,比如提取行政区划名称列表。
from osgeo import ogr
def get_names_from_vector(vector_path, name_field):
"""
读取矢量文件属性表指定列的所有唯一值
"""
print(f"正在读取矢量文件: {vector_path}")
ogr.RegisterAll()
ds = ogr.Open(vector_path, 0)
if ds is None:
raise IOError(f"无法打开文件: {vector_path} ...
作为一名遥感行业从业者,深知获取高质量标注数据集的痛点。针对新物体类别的分割任务,往往需要手动收集并标注成千上万张图像。相比物体检测的边界框标注,像素级分割的精确度要求更高,工作量成倍增加。
Meta的Segment Anything Model (SAM) 模型提供了一种革命性方法,能大幅加速各种物体的标注过程。下面,我们来深入探讨这个出色模型的细节。
主要内容
什么是Segment Anything Model (SAM)?
为什么需要SAM?
SAM的架构
SAM模型训练
结果分析
SAM 2的新特性
什么是Segment Anything Model (SAM)?SAM 是Meta AI开发的最先进AI模型,能在图像或视频中识别并分割任意物体。作为计算机视觉的基础模型,它无需额外训练即可泛化到新物体类别和任务。
本质上,SAM 执行图像分割任务,即将图像分区成多个物体段落。但它超越传统分割模型的地方在于:
通用性:能分割任何物体,即使训练数据中未包含。
交互性:用户可通过点、框或文本等提示引导模型。
实时性:能实时生成高质量掩码,适合交互应用。
适应性:无需大量重训,即可微 ...
我有个哥们儿,最近老跟我聊起一个事儿。他说,好多人二十出头的时候,对未来没啥紧迫感,觉得日子还长着呢。可一过三十,那股危机感就跟开了闸似的,扑面而来,让人有点慌神。
他想了好久,觉得中年危机,其实不是真等到中年才冒出来的,早在大家年轻时候就埋下了种子,只不过很多人拖到中年才猛地醒过味儿来。
赚钱这事儿,说白了就是你得有能耐,给社会添点值钱的东西,然后别人心甘情愿拿钱跟你换。
公司呢?在我哥们儿看来,就是个中间商,抽水的那种。往往有个牛人,带领导范儿的,拉起一帮人给他干活儿,攒出价值,再打包卖给外面的人。
为啥打工总赚不到大钱?不是你没出力,而是你出力没直达市场。你帮公司、帮老板忙活,换来的就那点死工资,不是产品卖掉后的分成。
公司这玩意儿,本质上就是中介、抽成、打包整合。老板雇你和一堆人,合力搞出东西卖出去。你要明白这个,就比很多人清醒多了。
如果你自己能单枪匹马跟市场换东西,那干嘛还吊死在一家公司树上?打工的根儿上,是因为你还玩不转独立创值,这才是要害。
所以,赶紧挖挖自己有啥本事,能让其他人买单的点子。
现在好多人去摆摊,我哥们儿觉得这超赞,从不觉得丢人,还觉得他们聪明着呢。
就算 ...
大家好,我是小白说遥感!今天我们继续聊聊遥感图像处理中的“老朋友”——裁剪影像(image clipping)。这是地理信息和遥感领域最常见、最基础的操作之一,但别看它简单,里面的“坑”和“门道”一点也不少。
随着传感器分辨率越来越高,单张影像动辄几十 GB,上百 GB 也不稀奇。很多小伙伴处理大文件时,经常出现内存爆掉、程序卡死、电脑宕机的情况(尤其是笔记本用户)。
那么裁剪这么大体量的影像,到底该怎么选工具?今天我们就从 rasterio 和 GDAL 两个角度来聊聊。
先说 rasterio:简单好用,但有“内存短板”rasterio 是一个专注于栅格数据操作的 Python 库,API 友好得像在玩积木,非常适合做快速开发和小规模数据处理。
其中最常用的裁剪函数就是:
from rasterio.mask import mask
out_image, out_transform = mask(src, [geometry], crop=False)
只要提供一个矢量 polygon,rasterio 就能帮你把影像剪得干干净净,尤其适合做:
小范围试验
批量测试
快速 d ...
大家好,我是小白说遥感,今天我们来聊聊在地理空间工作流中,YOLO 与 SAM 的对比分析。1. 数据集要求:有监督的边界框 vs 无需训练的提示
YOLO (v3 至 v9、YOLOv8、YOLO-NAS、YOLO-World)YOLO 是一种典型的数据驱动型模型。它要求提供带有标注的边界框数据集进行训练。它最适用于 COCO 风格的标注格式。在地理空间领域,YOLO 擅长处理来自大型正射影像的数百万个瓦片数据,尤其适用于数据经过清晰整理和策展的情况。
SAM (SAM、FastSAM、MobileSAM、SAM2)SAM 是一种零样本分割模型。它最大的特点是无需训练数据集。它通过使用提示(Prompt),如点、边界框或粗略的掩膜,来引导模型生成精确的分割结果。SAM 是在缺乏现有多边形标注或需要进行快速分割实验时的理想工具。
数据集总结:
YOLO 依赖大量标注数据,但运行稳定,结果可预测。
SAM 无需数据集,但分割结果依赖于用户输入的提示质量。
2. 算法与架构差异:检测优先 vs 分割优先YOLO:一步式目标检测器YOLO 是一种一步式目标检测器(One-Stage ...
大家好,我是小白说遥感,今天我们来聊聊图像处理中的一个实用技巧——直方图匹配(Histogram Matching)。
如果你是遥感、GIS、摄影或AI图像处理的从业者,肯定遇到过图像颜色不一致的问题。比如,多张卫星图像拼接时,颜色偏差会导致整体效果不佳。
这时候,直方图匹配就能派上用场,它可以让目标图像的颜色分布匹配模板图像,实现“匀色”效果。
本文基于一个Python脚本,详细教你如何实现批量处理16位、4波段TIF图像的直方图匹配。脚本使用分块处理,适合大图像,避免内存溢出。
我会一步步解释代码原理、如何运行,以及一些优化建议。无论你是新手还是老鸟,都能学到东西,以后自己复习也方便。
为什么需要直方图匹配?在图像处理中,直方图表示像素值的分布(比如亮度从0到255)。不同图像的直方图可能差异很大,导致颜色不匹配。
直方图匹配的核心是:
计算模板图像和目标图像的累积分布函数(CDF)。
通过映射,让目标图像的CDF匹配模板的CDF,从而调整像素值,实现颜色一致。
优势:
简单高效,尤其适合遥感图像(如卫星DOM)。
支持多波段(RGB+Alpha或多光谱)。
对于16位图 ...
在处理遥感影像和大型地理空间数据时,数据量动辄数十 GB 甚至 TB,传统的处理方式经常会遭遇“内存不足 (Out of Memory, OOM)”的窘境。幸运的是,GDAL(Geospatial Data Abstraction Library)提供了一个强大的解决方案——VRT (Virtual Raster),即虚拟栅格。
VRT 并非一个真正的数据文件,它是一个 XML 格式的描述文件,它告诉 GDAL 如何将多个源文件组合起来,或者如何对一个源文件进行某种变换。它的核心价值在于其“即时计算,按需加载”的特性。
一、什么是 VRT(虚拟栅格)?想象 VRT 就像一张地图索引,它本身不包含像素数据,只记录了:
数据源在哪里(哪个 TIF、JPG、PNG 文件)。
数据源的地理位置(坐标系统、边界)。
如何组合这些数据源(比如拼接、重采样、重投影)。
当 GIS 软件或程序请求 VRT 上的某个小区域数据时,GDAL 才会去读取对应的源文件中的相应像素,大大节省了内存和处理时间。
二、VRT 的核心应用场景VRT 是处理大数据的瑞士军刀。以下是它最常用的几个场景:
大型影 ...
之前写了一篇关于wgs84影像转为cgcs2000的影像的文章:《wgs84影像直接转换为cgcs2000影像》
在里面我写道:诸如遥感数据处理的东西,其实是没有技术含量的,本质上都是调用gdal的东西,你把gdal的各个接口弄明白了就掌握这个数据处理的技能,唯手熟尔。真正有难度的是算法、加速处理速度。我其实很久不做数据数据处理的东西了,因为我有足够的代码积累,我建立了一个代码库,需要哪个模块,我直接搜索。
cscs2000坐标系的EPSG代码计算cscs2000坐标系其实和wgs84一样,分为两种:地理坐标系和投影坐标系。
用大白话来区分地理和投影,是看它们的单位。
单位若是度分秒,就是地理坐标系;单位是米,就是投影坐标系。
除此之外,我们还要获取坐标系的EPSG号码。
这个参数,我们需要填写到gdal的Warp进行重投影。
wgs84地理坐标系的EPSG号码4326,cgcs2000地理坐标系的EPSG号码4490。
如果你是想转换为cgcs2000投影坐标系,还得继续计算。
投影坐标系分为3度带,和6度带。
以3度带为例,不同的带号的计算规则如下:
例如,经度为105°E,计算过 ...
由于家里电脑的硬盘空间实在吃紧,我在清理空间时顺手就把 ArcGIS 卸载了。其实卸载的时候还是犹豫了一下——毕竟陪伴了我这么多年,用得最熟的还是它。但家里主要是做一些个人学习、测试项目,硬盘空间又寸土寸金,只能忍痛割爱。
为什么办公电脑我却一直没动呢?原因很现实:假设哪天同事突然甩给我一个 ArcGIS 的模板或者 MXD 文件让我立刻出图,如果我告诉他“我机器上没 ArcGIS”,那场面会尬到能当场原地升天。办公室毕竟要处理甲方的活儿,一点不能出差错。
那我为什么最终会卸载 ArcGIS?其实主要是因为 QGIS 在不少工作流中已经能替代 ArcGIS 了。更关键的是,我们行业的甲方大部分都跟GOV有关,而GOV单位这几年疯狂推进国产化改造。
国产 Linux 电脑里, ArcGIS软件是不让装的,审计、检测一层层卡着,根本没机会上。而 QGIS 作为开源 GIS,自然而然趁势上位,在国产系统里用得顺风顺水。
说实话,我对 ArcGIS 的熟练度远远超过 QGIS。用 ArcGIS 出图就像用右手写字,而用 QGIS 更像换成左手,总觉得别扭、不顺手。
快捷键、工具逻辑、窗口布局… ...







