计算polygon面积和判断顺逆时针方向的方法

一.利用shapely求polygon面积

  import shapelyfrom shapely.geometry import Polygon, MultiPoint  # 多边形# box1 = [2, 0, 4, 2, 2, 4, 0, 2, 0, 0]box1 = [2, 0, 4, 2, 2, 4, 0, 2, 2, 2]poly_box1 = Polygon(np.array(box1).reshape(-1,2))print(poly_box1)print(poly_box1.area)

二.逆时针调整为顺时针

1.四个点 

def polygon_area1():'''compute area of a polygon:param poly::return:'''# # #顺时针# poly = np.array([[2, 0],#                  [4, 2],#                  [2, 4],#                  [0, 2]])# 逆时针poly = np.array([[2, 0],[0, 2],[2, 4],[4, 2]])poly_h = poly.shape[0]edge = []for i in range(poly_h - 1):edge.append((poly[i][0] - poly[i+1][0])*(poly[i][1] + poly[i + 1][1]))edge.append((poly[poly_h-1][0] - poly[0][0])*(poly[poly_h-1][1]+poly[0][1]))# edge = [#     (poly[1][0] - poly[0][0]) * (poly[1][1] + poly[0][1]),#     (poly[2][0] - poly[1][0]) * (poly[2][1] + poly[1][1]),#     (poly[3][0] - poly[2][0]) * (poly[3][1] + poly[2][1]),#     (poly[0][0] - poly[3][0]) * (poly[0][1] + poly[3][1])# ]area = np.sum(edge) / 2.print('=====The first way======')print('area:', area)if area <0:index = [0] + [i for i in range(poly_h - 1, 0, -1)]fix_poly = poly[index, :]print('fix_poly:', fix_poly)
def polygon_area2():'''compute area of a polygon:param poly::return:'''# # #顺时针# poly = np.array([[2, 0],#                  [4, 2],#                  [2, 4],#                  [0, 2]])# 逆时针poly = np.array([[2, 0],[0, 2],[2, 4],[4, 2]])edge = []poly_h = poly.shape[0]for i in range(poly_h-1):edge.append(poly[i][0] * poly[i+1][1] - poly[i+1][0] * poly[i][1])edge.append(poly[poly_h-1][0] * poly[0][1] - poly[0][0] * poly[poly_h-1][1])print('=====The second way======')# print('edge:', edge)area = np.sum(edge)/2.print('area:', area)#如果是逆时针 调整为顺时针if area < 0:index = [0] + [i for i in range(poly_h-1, 0, -1)]# print(index)fix_poly = poly[index, :]print('fix_poly:', fix_poly)
if __name__ == '__main__':# show_image()# compute_IOU_()polygon_area1()polygon_area2()

2.多个点

def polygon_area1():'''compute area of a polygon:param poly::return:'''# # #顺时针# poly = np.array([[2, 0],#                  [4, 2],#                  [2, 4],#                  [0, 2]])# 逆时针 凹多边形print('凹多边形')poly = np.array([[2, 0],[2, 2],[0, 2],[2, 4],[4, 2]])# 逆时针 凸多边形# print('凸多边形')# poly = np.array([[2, 0],#                  [0, 0],#                  [0, 2],#                  [2, 4],#                  [4, 2]])poly_h = poly.shape[0]edge = []for i in range(poly_h - 1):edge.append((poly[i][0] - poly[i+1][0])*(poly[i][1] + poly[i + 1][1]))edge.append((poly[poly_h-1][0] - poly[0][0])*(poly[poly_h-1][1]+poly[0][1]))# edge = [#     (poly[1][0] - poly[0][0]) * (poly[1][1] + poly[0][1]),#     (poly[2][0] - poly[1][0]) * (poly[2][1] + poly[1][1]),#     (poly[3][0] - poly[2][0]) * (poly[3][1] + poly[2][1]),#     (poly[0][0] - poly[3][0]) * (poly[0][1] + poly[3][1])# ]area = np.sum(edge) / 2.print('=====The first way======')print('area:', area)if area <0:print('此为逆时针,调整为顺时针')index = [0] + [i for i in range(poly_h - 1, 0, -1)]fix_poly = poly[index, :]print('fix_poly:', fix_poly)
def polygon_area2():'''compute area of a polygon:param poly::return:'''# # #顺时针# poly = np.array([[2, 0],#                  [4, 2],#                  [2, 4],#                  [0, 2]])# 逆时针 凹多边形print('凹多边形')poly = np.array([[2, 0],[2, 2],[0, 2],[2, 4],[4, 2]])# 逆时针 凸多边形# print('凸多边形')# poly = np.array([[2, 0],#                  [0, 0],#                  [0, 2],#                  [2, 4],#                  [4, 2]])edge = []poly_h = poly.shape[0]for i in range(poly_h-1):edge.append(poly[i][0] * poly[i+1][1] - poly[i+1][0] * poly[i][1])edge.append(poly[poly_h-1][0] * poly[0][1] - poly[0][0] * poly[poly_h-1][1])print('=====The second way======')# print('edge:', edge)area = np.sum(edge)/2.print('area:', area)#如果是逆时针 调整为顺时针if area < 0:print('此为逆时针,调整为顺时针')index = [0] + [i for i in range(poly_h-1, 0, -1)]# print(index)fix_poly = poly[index, :]print('fix_poly:', fix_poly)
if __name__ == '__main__':# show_image()# compute_IOU_()polygon_area1()polygon_area2()

           

三.计算不规则多边形面积

分解成梯形,面积依次相加

import numpy as np
points = np.array([[0.72, 2.28],[2.66, 4.71],[5,	 3.5],[3.63, 2.52],[4,	1.6],[1.9,	1]])
print(points.shape)
h, w = points.shape
areas = []
for i in range(0, points.shape[0]):area = (points[(i+1) % h][-1] + points[i][-1])*(points[(i+1) % h][0] - points[i][0])/2areas.append(area)print(points[i])print(points[(i+1) % h])
print('==areas:', areas)
print(sum(areas))

 

参考:https://www.cnblogs.com/TenosDoIt/p/4047211.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚洲与非洲:中国支付巨头的海外进击

来源&#xff1a;资本实验室摘要&#xff1a;当下&#xff0c;对国人消费影响最大的两家互联网公司莫过于阿里巴巴和腾讯。这两大公司将大量消费级应用整合在自身的平台上&#xff0c;已经彻底改变了许多人的餐饮、购物、出行、旅游等生活方式&#xff0c;而移动支付是其中最基…

利用已有的标注文字信息制作fake数据

from PIL import Image, ImageDraw, ImageFont, ImageFilter import random import glob import numpy as np import os import cv2 from nespaper_semantics import seg_str 1. 从文字库随机选择10个字符 2. 生成图片 3. 随机使用函数# 从字库中随机选择n个字符 def sto_choic…

汽车芯片:半导体芯片巨头加速成长

来源&#xff1a;乐晴智库精选伴随汽车智能化提速&#xff0c;汽车半导体加速成长。2017年全球汽车销量9680万辆(3%);汽车半导体市场规模288亿美元(26%)&#xff0c;增速远超整车。汽车半导体按种类可分为功能芯片MCU(MicrocontrollerUnit)、功率半导体(IGBT、MOSFET等)、传感器…

将MSRA-TD500标签转换成逆时针输出标签+labeleme json格式转四个点的txt

一&#xff0e;MSRA-TD500 : http://www.iapr-tc11.org/mediawiki/index.php/MSRA_Text_Detection_500_Database_%28MSRA-TD500%29 #coding:utf-8 """ fzh created on 2019/12/6 将MSRA-TD500数据标签转换成按逆时针输出 也即  index,difficulty label,x,y,w…

一文看尽2018全年AI技术大突破

来源&#xff1a;量子位摘要&#xff1a;2018&#xff0c;仍是AI领域激动人心的一年。这一年成为NLP研究的分水岭&#xff0c;各种突破接连不断&#xff1b;CV领域同样精彩纷呈&#xff0c;与四年前相比GAN生成的假脸逼真到让人不敢相信&#xff1b;新工具、新框架的出现&#…

pyecharts地图使用

1.首先安装包 pip install pyecharts0.5.1 2.安装地图包 依次是全球地图、中国省级地图、中国市级地图、中国区县级地图、中国区域地图 pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg …

《科学》:基因编辑婴儿入选年度“科学崩坏”事件

来源&#xff1a;知识分子摘要&#xff1a;《科学》杂志每年会评出在即将过去的一年里最为重要的十大科学突破&#xff08;Science Breakthrough&#xff09;。今年&#xff0c;夺得年度突破桂冠的是“单细胞水平细胞谱系追踪技术”&#xff0c;帮助破获多起悬案的法医系谱技术…

利用scipy包计算表格线的峰值,还原表格得到表格结构

1. 利用scipy包计算表格线的峰值 import cv2 import numpy as np from scipy.signal import find_peaks, peak_widthsdef get_lines_from_image(img_bin, axis, kernel_len_div 20, kernel_len None, iters 3):""":param img_bin: opencv img:param axis: 0…

原子智库 | 刘伟:人工智能快追上人类思维?答案可能让你失望

来源&#xff1a;原子智库摘要&#xff1a;2018年12月15日&#xff0c;原子智库主办的“改革的规则与创新——2018光华腾讯经济年会暨风云演讲”在北京大学举办北京邮电大学人机交互与认知工程实验室主任刘伟发表演讲。演讲的话题是未来工业化发展、智能化发展。刘伟在演讲中指…

利用xlwt写excel并进行单元格的合并

1.写入行列值 import xlwt # 创建一个workbook 设置编码 workbook xlwt.Workbook(encodingutf-8) # 创建一个worksheet worksheet workbook.add_sheet(My Worksheet)# 写入excel # 参数对应 行, 列, 值 worksheet.write(1, 0, label this is test)# 保存 workbook.save(Exc…

为了边缘计算,亚马逊、谷歌、微软已正面交锋!

来源&#xff1a;全球物联网观察摘要&#xff1a;so&#xff0c;你真的了解边缘计算吗&#xff1f;边缘计算的前世今生云计算自2005年提出之后&#xff0c;就开始逐步地改变我们的生活、学习、工作的方式。云计算使得公司能够在自己的物理硬件之外&#xff0c;通过远程服务器网…

每日一小练——二项式系数加法解

上得厅堂&#xff0c;下得厨房&#xff0c;写得代码&#xff0c;翻得围墙&#xff0c;欢迎来到睿不可挡的每日一小练&#xff01; 题目&#xff1a;二项式系数加法解 内容&#xff1a;请编写一个程序&#xff0c;仅仅用加法&#xff0c;求出n中取r个组合系数C(n,r)&#xff0c;…

华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告

来源&#xff1a;智东西摘要&#xff1a;本文全面讲解人工智能芯片&#xff0c;系统梳理人工智能芯片的发展现状及趋势。2010 年以来&#xff0c;由于大数据产业的发展&#xff0c;数据量呈现爆炸性增长态势&#xff0c;而传统的计算架构又无法支撑深度学习的大规模并行计算需求…

SSD300网络结构(pytorch)+多尺度训练与测试

一.SSD300 1.如图是预测框的相应feature map 这里smin是0.2&#xff0c;表示最底层的scale是0.2&#xff1b;smax是0.9&#xff0c;表示最高层的scale是0.9,m代表产生尺度预测的feature map个数。 其中anchor的长宽关系&#xff0c;s就是上图中的scale,a就是上图中的anchor …

01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider...

第一步骤&#xff1a;hibernate.cfg.xml文件补上如下配置&#xff1a; <?xml version"1.0" encoding"utf-8"?> <!-- This template was written to work with NHibernate.Test. Copy the template to your NHibernate.Test project folder and…

2018, 自动驾驶异常艰难的一年

编译&#xff1a;张玺 &#xff0c;编辑&#xff1a;宇多田摘要&#xff1a;虽然文章几乎聚焦于美国硅谷的技术公司&#xff0c;但这并不意味着作者提出的种种问题不存在于中国的技术公司身上。有意思的是&#xff0c;作者批评了各大公司此前疯狂立 flag&#xff0c;却最后纷纷…

目标检测矩形框与polygon数据增加--裁剪,拓展,旋转

1.裁剪 import torch from torchvision import transforms import cv2 import numpy as np import types from numpy import random class RandomSampleCrop(object):"""CropArguments:img (Image): the image being input during trainingboxes (Tensor): th…

医生们说,AI不会取代我们!

来源&#xff1a;IEEE电气电子工程师学会每次人工智能在医疗任务中与医生进行竞争&#xff08;对此我们已经报道过很多次&#xff09;时&#xff0c;一个问题不可避免地浮出水面&#xff1a;人工智能会取代医生吗&#xff1f;如果你与AI 专家或硅谷投资者交谈&#xff0c;答案往…

ubuntu安装python3.5+pycharm+anaconda+opencv+docker+nvidia-docker+tensorflow+pytorch+Cmake3.8

一&#xff0c;切换python版本为3.5 装好ubuntu&#xff0c;python版本是2.7的 我自己安装并更改打开为python3.5 sudo apt-get install python3.5 设置优先级和默认环境&#xff1a; sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 su…

学界 | 量化深度强化学习算法的泛化能力

来源&#xff1a;AI 科技评论OpenAI 近期发布了一个新的训练环境 CoinRun&#xff0c;它提供了一个度量智能体将其学习经验活学活用到新情况的能力指标&#xff0c;而且还可以解决一项长期存在于强化学习中的疑难问题——即使是广受赞誉的强化算法在训练过程中也总是没有运用监…