当前位置: 首页 > news >正文

计算图片中两个任意形状多边形相交部分的大小

一张图片中两个任意多边形相交的面积计算方法。本文参考https://blog.csdn.net/PanYHHH/article/details/110940428;加了一个简单的示例,也对代码做了一点清淅化。原博客中还有其他链接,是C代码,没有看原理,但以下代码也可以很容易转成C代码,用opencv 来实现。

import cv2
import numpy as np
ImH=200
ImW=200
Polygon1=np.array([[0,0],[100,0],[100,100],[0,100]],dtype=np.int32)
Polygon2=np.array([[50,50],[150,50],[150,150],[50,150]],dtype=np.int32)
ImShape=(ImH,ImW,3)
def DrawPolygon(ImShape,Polygon,Color):Im = np.zeros(ImShape, np.uint8)    cv2.fillPoly(Im, [Polygon], Color)  # 这个函数可以画凹凸多边形,所以这个更稳妥#cv2.fillConvexPoly(Im,Polygon,Color) #这行代码也是可以的,因为是凸多边形return Im
Im1 = DrawPolygon(ImShape, Polygon1, (255, 0, 0))
Im2 = DrawPolygon(ImShape, Polygon2, (0, 255, 0))
plt.subplot(311)
plt.imshow(Im1)
plt.subplot(312)
plt.imshow(Im2)Im1 =DrawPolygon(ImShape[:-1],Polygon1,122)#多边形1区域填充为122
Im2 =DrawPolygon(ImShape[:-1], Polygon2, 133)#多边形2区域填充为133
Im = Im1 + Im2
ret, OverlapIm = cv2.threshold(Im, 200, 255, cv2.THRESH_BINARY)#根据上面的填充值,因此新图像中的像素值为255就为重叠地方
plt.subplot(313)
plt.imshow(OverlapIm,cmap="gray")
IntersectArea=np.sum(np.greater(OverlapIm, 0))#求取两个多边形交叠区域面积
print("cumstom calcuate area:{}\n".format(IntersectArea))#下面使用opencv自带的函数求取一下,最为对比
contours, hierarchy = cv2.findContours(OverlapIm,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
contourArea=cv2.contourArea(contours[0])
print('contourArea={}\n'.format(contourArea))
perimeter = cv2.arcLength(contours[0], True)
print('contourPerimeter={}\n'.format(perimeter))
RealContourArea=contourArea+perimeter
print('RealContourArea={}\n'.format(RealContourArea))

结果如下图
在这里插入图片描述

http://www.lryc.cn/news/229446.html

相关文章:

  • JavaScript的函数
  • stm32 - Cortex
  • 计算机组成原理之概述
  • 思维导图软件 Xmind mac中文版软件特点
  • 群晖 DSM 7.0 Synology Photos IOS | Android 客户端下载
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • React处理用户交互事件,如点击、输入框变化等,并使用事件处理函数来响应这些事件
  • 情侣游戏情侣飞行棋小程序系统:智能化互动,增添情感交流
  • 软考 系统架构设计师系列知识点之云计算(2)
  • Technology Strategy Patterns 学习笔记8- Communicating the Strategy-Decks(ppt模板)
  • Python实现WOA智能鲸鱼优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战
  • 【机器学习基础】机器学习入门(2)
  • C#中在.NET 7.0控制台应用使用ADO.NET的方法
  • 垃圾回收(GC)
  • 【无标题】通用工作站设计方案:ORI-D3R600服务器-多路PCIe3.0的双CPU通用工作站
  • HarmonyOS元服务实现今天吃什么
  • 激活函数的本质
  • [工业自动化-18]:西门子S7-15xxx编程 - 软件编程 - PLC用于工业领域的嵌入式系统:硬件原理图、指令系统、系统软件架构、开发架构等
  • 【C++】——运算符重载
  • 怎么理解独立机器和虚拟机
  • 以太网和局域网
  • 【Git】第三篇:基本操作(配置本地仓库)
  • JS中sort排序
  • 【现场问题】datax中write部分为Oracle的时候插入clolb类型字段,插入的数据为string且长度过场问题
  • ASK、PSK、FSK的调制与解调
  • 基于XML的声明式事务
  • 力扣labuladong一刷day9滑动窗口共4题
  • ubuntu开机系统出错且无法恢复。请联系系统管理员。
  • Transformer详解一:transformer的由来和先导知识
  • 数字化产品经理的金字塔能力模型