python Shapely 使用指南
刚从学习了Shapely包使用,怕忘记,在这里记录一下。
阅读目录
1、引入包
from shapely.geometry import Point
from shapely.geometry import LineString
2、共有的变量和方法
object.area

Returns the area (float) of the object.

object.bounds

返回对象的(minx,miny,maxx,maxy)元组(float类型)

object.length

返回对象的长度

object.geom_type

返回对象类型

object.distance(other)

返回本对象和另一个对象的距离

object.representative_point()

Returns a cheaply computed point that is guaranteed to be within the geometric object.

>>> from shapely.geometry import Point
>>> print Point(0,0).distance(Point(0,1))
1.0
>>> from shapely.geometry import LineString
>>> line = LineString([(0,0), (1,1), (1,2)])
>>> line.area
0.0
>>> line.bounds
(0.0, 0.0, 1.0, 2.0)
>>> line.length
2.414213562373095
>>> line.geom_type
'LineString'

3、Point
class Point(coordinates)

三种赋值方式

>>> point = Point(0,0)
>>> point_2 = Point((0,0))
>>> point_3 = Point(point)

一个点对象有area和长度都为0

>>> point.area
0.0
>>> point.length
0.0

坐标可以通过coords或x、y、z得到

>>> p = Point(2,3)
>>> p.coords
<shapely.coords.CoordinateSequence object at 0x7ffbc3d60dd0>
>>> list(p.coords)
[(2.0, 3.0)]
>>> p.x
2.0
>>> p.y
3.0

coords可以被切片

>>> p.coords[:]
[(2.0, 3.0)]

4、LineStrings
LineStrings构造函数传入参数是2个或多个点序列

一个LineStrings对象area为0,长度非0

>>> line = LineString([(0,0), (0,1), (1,2)])
>>> line.area
0.0
>>> line.length
2.414213562373095

获得坐标

>>> line.coords[:]
[(0.0, 0.0), (0.0, 1.0), (1.0, 2.0)]>>> list(line.coords)[(0.0, 0.0), (0.0, 1.0), (1.0, 2.0)]

LineString依然可以接受一个同类型对象

>>> line2 = LineString(line)
>>> line2.coords[:]
[(0.0, 0.0), (0.0, 1.0), (1.0, 2.0)]

5、常见格式转换
wkt: Well Know Text

wkb: Well Kown Binary

>>> Point(1,1).wkt
'POINT (1 1)'
>>> Point(1,1).wkb
'\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'
>>> Point(1,1).wkb.encode('hex')
'0101000000000000000000f03f000000000000f03f'
>>>
>>> Point(1,1).wkb.encode('hex')
'0101000000000000000000f03f000000000000f03f'

两者都有loads和dumps方法

对于wkt

>>> from shapely.wkt import dumps, loads
>>> s = dumps(Point(1,2))
>>> s
'POINT (1.0000000000000000 2.0000000000000000)'
>>> ss = loads(s)
>>> ss
<shapely.geometry.point.Point object at 0x7ffbc3d783d0>
>>> ss.coords[:]
[(1.0, 2.0)]

对于wkb

>>> from shapely.wkb import dumps, loads
>>> s = dumps(Point(1,2), hex=True)
>>> s
'0101000000000000000000F03F0000000000000040'
>>> ss = loads(s, hex=True)
>>> ss
<shapely.geometry.point.Point object at 0x7ffbc3d78790>
>>> ss.coords
<shapely.coords.CoordinateSequence object at 0x7ffbc3d783d0>
>>> ss.coords[:]
[(1.0, 2.0)]

补充代码:

# ------------------------------------------------------------------------------------------------------------------
# 在目标检测中一个很重要的问题就是NMS及IOU计算,而一般所说的目标检测检测的box是规则矩形框,计算IOU也非常简单,有两种方法:# 1. 两个矩形的宽之和减去组合后的矩形的宽就是重叠矩形的宽,同比重叠矩形的高
#    IOU = 交集部分/包含两个四边形最小多边形的面积# 2. 右下角的minx减去左上角的maxx就是重叠矩形的宽,同比高
#    IOU = 重叠面积 / (两矩形面积和—重叠面积)# 不规则四边形就不能通过这种方式来计算,python的shapely包可以直接做到,下面给出的代码和注释
# 来自:白翔老师的textBoxes++论文源码,
# ------------------------------------------------------------------------------------------------------------------import numpy as np
import shapely
from shapely.geometry import Polygon, MultiPoint  # 多边形line1 = [2, 0, 2, 2, 0, 0, 0, 2]  # 四边形四个点坐标的一维数组表示,[x,y,x,y....];随意分别放入框的四个角坐标
a = np.array(line1).reshape(4, 2)  # 四边形二维坐标表示
poly1 = Polygon(a).convex_hull  # python四边形对象,会自动计算四个点,最后四个点顺序为:左上 左下  右下 右上 左上
print(Polygon(a).convex_hull)  # 可以打印看看是不是这样子(0 0, 0 2, 2 2, 2 0, 0 0)line2 = [1, 1, 4, 1, 4, 4, 1, 4]
b = np.array(line2).reshape(4, 2)
poly2 = Polygon(b).convex_hull
print(Polygon(b).convex_hull)union_poly = np.concatenate((a, b))  # 合并两个box坐标,变为8*2
print(union_poly)
print(MultiPoint(union_poly).convex_hull)  # 包含两四边形最小的多边形点;(0 0, 0 2, 1 4, 4 4, 4 1, 2 0, 0 0)
if not poly1.intersects(poly2):  # 如果两四边形不相交iou = 0
else:try:inter_area = poly1.intersection(poly2).area  # 相交面积print(inter_area)# union_area = poly1.area + poly2.area - inter_areaunion_area = MultiPoint(union_poly).convex_hull.area  # 最小多边形点面积print(union_area)if union_area == 0:iou = 0# iou = float(inter_area) / (union_area-inter_area)  #错了iou = float(inter_area) / union_area# iou=float(inter_area) /(poly1.area+poly2.area-inter_area)# 源码中给出了两种IOU计算方式,第一种计算的是: 交集部分/包含两个四边形最小多边形的面积# 第二种: 交集 / 并集(常见矩形框IOU计算方式)except shapely.geos.TopologicalError:print('shapely.geos.TopologicalError occured, iou set to 0')iou = 0print(a)print(iou)

python Shapely包使用,实现多边形iou相关推荐

  1. python shapely函数 笔记

    Shapely是一个Python库,用于操作和分析笛卡尔坐标系中的几何对象.https://shapely.readthedocs.io/en/latest/manual.html#empty-fea ...

  2. python怎么安装包-怎么在windows下安装python第三方包

    python第三方包的windows安装文件exe格式, 这上面有很多python第三方包的二进制安装文件,包括32位和64位的.下载安装就ok了! 这下面有很多python第三方包的二进制安装文件, ...

  3. python第三方包的windows安装文件exe格式

    今天弄了一上午的python-ldap,发现要么安装vc,要么用其他比较麻烦的方法,都比较麻烦.幸好找到这个地址: http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...

  4. windows10怎么安装python第三方库_怎么在windows下安装python第三方包

    python第三方包的windows安装文件exe格式, 这上面有很多python第三方包的二进制安装文件,包括32位和64位的.下载安装就ok了! 这下面有很多python第三方包的二进制安装文件, ...

  5. python Shapely使用指南详解

    参考python Shapely使用指南详解 - 云+社区 - 腾讯云 Shapely是一个Python库,用于操作和分析笛卡尔坐标系中的几何对象. 引入包 from shapely.geometry ...

  6. python第三方包

    Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...

  7. python pycharm 包 安装问题

    20211006 https://blog.csdn.net/anshuai_aw1/article/details/83749395 windows pyfm安装 20210930 在pycharm ...

  8. TensorFlow常用Python扩展包

    TensorFlow常用Python扩展包 TensorFlow 能够实现大部分神经网络的功能.但是,这还是不够的.对于预处理任务.序列化甚至绘图任务,还需要更多的 Python 包. 下面列出了一些 ...

  9. python基础:python扩展包的安装方式

    python扩展包有三种安装方式: 1. pip安装方式.python3默认自带pip,无需另外安装:在python2.7版本上默认为easy_install安装工作进行安装,如果需要使用pip安装, ...

最新文章

  1. 四轴飞行器1.1 Matlab 姿态显示
  2. cad多个窗口并排显示_你早该这么做!并排查看Excel工作表其实一个小动作就搞定!...
  3. 相对URI以及base的设置
  4. 数据科学 IPython 笔记本 8.5 简单的散点图
  5. 数据可视化demo_火出圈的大屏你真的会做吗?这才是老板最爱的可视化大屏
  6. 客户端父进程提前死亡
  7. 根据一张表更新另一张表
  8. 物联网卡购买最关注的六个点
  9. 20. javacript高级程序设计-JSON
  10. [菜鸟自学过程] ASP.NET2.0 ClientCallback脚本回调
  11. java发送hotmail邮件,使用javamail将电子邮件发送到hotmail时遇到问题
  12. JDBC09 CLOB文本大对象
  13. Linux进程的管理与调度(一)--- Linux进程描述符task_struct结构体详解
  14. 资金盘FairWin漏洞系统详解:项目方可以撇开“作恶”嫌疑了?
  15. MATLAB 遗传算法求解约束优化问题
  16. 合并Python列表的魔幻12法
  17. 转载标明出处用英语_转载怎么注明出处
  18. php导出word样式控制,php导出word文档样式以及word文档分页
  19. JavaScript:实现GnomeSort侏儒排序算法(附完整源码)
  20. geotools中等值面的生成与OL3中的展示

热门文章

  1. 轻松查询UPS国际件物流,并筛选某一天签收的所有单号
  2. 弹载计算机标准,弹载计算机
  3. Shell中for循环的几个常用写法
  4. 百度地图切换罗盘后不能正北
  5. centos 删除文件夹失败 centos cannot remove ****, is a directory
  6. linux字符串的截取
  7. 仪器仪表行业分销渠道系统:实现渠道互联网化,与渠道商互利共赢
  8. Eclipse注册码
  9. SOR迭代法python实现
  10. 娱乐性质的AI,评测性取向,有可能!~男男是真爱,男女只是为了下一代