if __name__ == "__main__": 是 Python 中一个常见的用法,它主要用于确定当前脚本是作为主程序执行,还是被导入到其他模块中。
具体来说,当 Python 解释器执行一个脚本文件时,它会把一个全局变量 __name__ 设置为 "__main__",这样在脚本内部就可以通过 __name__ 这个变量来判断当前脚本是否是主程序。如果一个脚本文件被直接执行,则 __name__ 的值为 "__main__",如果一个脚本文件被作为模块导入到其他脚本中,则 __name__ 的值为其模块名。
因此,if __name__ == "__main__": 这个条件语句通常被用来将一些只在当前脚本作为主程序执行时执行的代码块包裹起来,以防止它们在被导入为模块时执行。这样做可以使得一个脚本文件既可以作为独立的程序运行,也可以作为其他程序的模块导入使用,提高了代码的灵活性和可重用性。
例如,当一个 Python 脚本文件中包含了以下代码:
def main():
print("This is the main function.")
if __name__ == ...
一、背景介绍numpy是Python中用于处理大型多维数组和矩阵的库,而shapely则是一个用于处理几何对象的Python库,支持点、线、多边形等几何类型。
二、实现方法为了实现在多边形内部生成随机点的功能,我们可以定义一个函数random_points_in_polygon,该函数接受一个多边形对象和要生成的随机点数量作为参数,并返回多边形内部的随机点列表。
最近看到一个项目:使用YoloV8实例分割识别猪的姿态。
个人觉得比较有趣,比较好玩。根据介绍,一步一步地使用yolov10对猪猪的姿态进行识别。
假如数据换成遥感数据,是完全可以实现对某某地物的识别,如飞机、船舶、汽车等等。
技术的发展常常会经历从理论研究到实际应用的过程。在技术不断演进和完善的过程中,一项新技术可能开始作为研究课题或实验室项目,经过不断的优化和改进,最终成为可以应用于实际场景的成熟技术。
数据集下载 使用的数据集来源于Kokkenborg Aps,下载地址:
https://365ucl.sharepoint.com/:f:/s/dataset-oft/Eicf36oizq1DvISOjGEHuwABFA6 ...
在特定的地理区域或形状内生成随机点。这种需求很少,但在上周恰好我需要,在网上的资料又比较少,所以现在对此总结一下。
在Python中,我们可以利用numpy和shapely库来实现这一功能。
一、背景介绍numpy是Python中用于处理大型多维数组和矩阵的库,而shapely则是一个用于处理几何对象的Python库,支持点、线、多边形等几何类型。
二、实现方法为了实现在多边形内部生成随机点的功能,我们可以定义一个函数random_points_in_polygon,该函数接受一个多边形对象和要生成的随机点数量作为参数,并返回多边形内部的随机点列表。
网上有一句话关于,大概意思是,如果没有一些国外免费的遥感数据作为支撑,很多遥感地信人毕业难度会增加很多。
如果你没有遥感数据,真的可以先用Landsat数据作为学习,等你工作了遇到国产遥感数据就能顺利过渡,至少大部分光学遥感数据都是相通的。
比如说今天的主题是Landsat 8 卫星轨道设计特点,咱从轨道设计的特点来探讨为什么大部分光学遥感数据都是相通。
首先,Landsat 8卫星运行在近极地太阳同步轨道上,这种轨道设计使得卫星能够覆 ...
在特定的地理区域或形状内生成随机点。这种需求很少,但在上周恰好我需要,在网上的资料又比较少,所以现在对此总结一下。
在Python中,我们可以利用numpy和shapely库来实现这一功能。
一、背景介绍numpy是Python中用于处理大型多维数组和矩阵的库,而shapely则是一个用于处理几何对象的Python库,支持点、线、多边形等几何类型。
二、实现方法为了实现在多边形内部生成随机点的功能,我们可以定义一个函数random_points_in_polygon,该函数接受一个多边形对象和要生成的随机点数量作为参数,并返回多边形内部的随机点列表。
函数定义:
首先,我们定义一个空列表points来存储生成的随机点。
然后,我们获取多边形的边界坐标(最小x、最小y、最大x、最大y),这些坐标将用于限定随机点的生成范围。
在一个循环中,我们不断生成随机点,直到生成的随机点数量达到指定的数量。
对于每个随机点,我们使用Polygon.contains()方法检查它是否位于多边形内部。如果是,则将其添加到points列表中。
创建多边形:
使用给定的顶点坐标创建一个Polygon对象 ...
在图像处理和地理空间数据处理中,OpenCV、NumPy和GDAL是常用的库。然而,它们在数据读取和坐标引用方式上存在差异,可能导致使用时出现矛盾。以下是对这三者读取数据的行列差异及矛盾的分析:
OpenCV
数据读取方式:
OpenCV使用cv2.imread()方法读取图像,返回一个NumPy数组。
数据格式:
读取的图像数据格式为(height, width, channels),即(行数, 列数, 通道数)。
坐标引用方式:
在OpenCV中,坐标系统遵循图像处理的惯例,(i, j)表示第i行、第j列的像素。
NumPy
数据读取方式:
NumPy可以通过多种方式读取数据,例如numpy.loadtxt()、numpy.genfromtxt()等。
数据格式:
NumPy数组的默认格式为(rows, cols),即(行数, 列数)。对于多维数组,格式为(depth, rows, cols)。
坐标引用方式:
NumPy数组中的元素通过(i, j)访问,即第i行、第j列。
GDAL (Geospatial Data Abstraction Librar ...
KML 和 KMZ 都是 Google 地球和其他地图程序中用于显示地理数据的文件格式。两者之间的主要区别在于,KML 是一种用于以 XML 格式存储地理数据的文件格式,而 KMZ 是一种压缩文件格式,包含一个或多个 KML 文件及其关联资源。
阅读本文,了解有关 KML 和 KMZ 的更多信息以及它们之间的区别。
什么是 KML?KML(Keyhole 标记语言)是一种用于在三维空间中显示地理数据的文件格式,通常在 Google 地球等虚拟地球仪上显示。它是一种基于 XML 的语言,允许您构建和显示结构化地理信息。
例如,点由其纬度、经度和(可选)高度定义,并指示地图上的特定位置。地图上的线条和多边形描绘路径或区域,并由一组定义其形状的坐标定义。使用“扩展数据”元素,可以将名称、描述和 URL 等描述性信息链接到这些地理元素。
以下是 KML 的一些关键功能和组件 -
地理特征- KML 可以定义众多地理元素,例如点、线、多边形和 3D 模型。这些功能可以显示在虚拟地球上,您可以使用名称、描述和照片对其进行自定义。
样式- 在 KML 中,您还可以设置地理特征的样式。您可以更改线条 ...
在上周的空余时间,实现了单景大疆无人机航片的粗几何校正。现在把程序改造为批量处理模式,并打包为exe二进制可执行文件。
以下是下载链接,仅供参考学习:
AerialCorrection.exe https://www.alipan.com/s/WfQ5nEVUPpx
30天后过期。
输入参数有三个输入参数:
1.航片文件所在的文件夹路径
2.输出文件保存的文件夹路径
3.无人机镜头的像元尺寸,单位是μm。 (根据你的镜头信息填写)如果是4.4μm,就填4.4
存在的bug输入参数中的文件夹路径不能存在中文、特殊符号,尽量使用纯英文路径。
这个bug是因为编码方式造成的。
可以改进的地方1.解决中文、特殊符号乱码的问题。
2.解决自动选择像元尺寸参数的问题。
进阶学习方向不限于以下研究方法:
1.航片配准
2.航片拼接
3.点云生成
4.数字高程模型生成
5.3维模型生成
还有很多研究方向,等待去挖掘。
经过这几天的测试,完成无人机航拍图像几何校正,也叫做航片的正射影像处理。
主要步骤如下:
现在对每一个步骤分析,谈论为什么要这样做。
获取航片信息
获取航片信息是为了计算影像的分辨率,相关操作可以查看这里。
根据偏航角旋转图片这步骤是必要的。详细讲解如何实现这一步骤。
扩充图像的意思是,用0值在图像的边缘填充,这一步骤的目的是,为了 旋转后的图像 还在指定尺寸范围内。
扩充图像效果如下:
下一步是对图像进行旋转,假设偏航角为-45°,则此时要对图像进行逆时针旋转45°。
这涉及到另一个问题,偏航角的定义。示意图如下:
简单来说,航迹线偏在航线右边,偏航角为正,航迹线偏在航线左边,偏航角为负。请看下面的灵魂画图。
这里假设偏航角是-45度,旋转中心为图像的中心,旋转后的图像如下:
为什么要先扩充图像,再旋转?因为这里调用opencv的函数,如果直接对原始图像进行旋转,会丢失部分信息。
直接对原始图像进行旋转,效果如下:
如上图所示,部分信息被省略了,所以要先用0值扩充图像边缘,使图像的尺寸增加一倍,然后再对扩充后的图像进行旋转。
裁剪图像这一步骤的目的是,为了减少旋转图像的 ...
遥感图像的空间分辨率遥感图像的空间分辨率是衡量图像上可检测到的最小地面单元尺寸的关键指标,它通常用地面采样间距(GSD)或像元大小来表示。
像元大小直接关联着图像中每个像素所代表的地面面积。例如,在1米空间分辨率的图像中,每个像素对应着实际地面上1米×1米的区域。
GSD是无人机或遥感卫星拍摄的影像中每个像素所代表的实际空间距离。它可以通过以下公式计算:
d = (s * H) / (f * 10) # 注意单位转换
其中:
d:单位厘米(cm),指空间分辨率。
s:单位微米(µm),指像元尺寸(也叫像素大小、像素间距)。
H:单位米(m),指飞行高度。(不是绝对高度)
f:单位毫米(mm),指镜头的焦段(焦距)。
请注意,在公式中我们进行了单位转换,因为1毫米等于10微米,所以除以10来确保单位的一致性。
单位关系为:
1米(m)= 100厘米(cm)
1毫米(mm)= 10微米(µm)
通过这个公式,我们可以根据已知的像元尺寸、飞行高度和焦距来计算GSD,从而了解遥感图像的空间分辨率。这对于遥感数据的分析和应用至关重要,因为它直接影响到图像中地物细节的识别能力。
示例以大 ...
在地理信息系统中,获取精确的地理位置数据对于各种分析至关重要。随着数码摄影的普及,越来越多的照片包含了EXIF元数据,其中就包含了拍摄地点的GPS信息。本文将介绍如何使用Python编程语言从照片中提取这些GPS信息,并将其转换为Shapefile文件,以便在GIS软件中进行进一步的分析和处理。
一、准备工作在开始之前,需要确保已经安装了以下Python库:
PIL(或Pillow):用于处理图像文件。
pyshp:用于读写Shapefile文件。
可以使用pip来安装这些库:
pip install pillow pyshp
二、准备工作首先,我们需要编写一个函数来从照片中提取EXIF元数据中的GPS信息。这个函数将打开照片文件,解析EXIF标签,并提取出经度和纬度信息。
from PIL import Image
def exif(img):
"""
从图片中返回EXIF元数据
"""
exif_data = {}
try:
i = Image.open(img) # 使用PIL库打开图片
tags ...