坐标计算与面积重叠比较
比如拿到一张图片,包含图片中所有人物的坐标,这时,需要在Web网页上显示该图并选中坐标包含的目标人物
第一步: 先确定好坐标是(x1,y1,x2,y2) 还是(x1,y1,w,h)格式,如果是第二种,稍微多点计算,这里就以第二种方式为例
//获取原图坐标 Coors cor = new Coors(); int m_X = Convert.ToInt32(item.Coordinate_X.ToString()); int m_Y = Convert.ToInt32(item.Coordinate_Y.ToString()); int m_W = Convert.ToInt32(item.Coordinate_W.ToString()); int m_H = Convert.ToInt32(item.Coordinate_H.ToString()); //拼接FTP地址 //var url = string.Format("ftp://{0}:{1}@{2}/{3}", linuxFtpUser, linuxFtpPwd, linuxIp, path); var Url = item.imgpath.Replace("ftp:", "ftp:/"); byte[] buffer = new WebClient().DownloadData(Url); //byte[] 转内存流 MemoryStream ms = new MemoryStream(buffer); Image img = Image.FromStream(ms, true); //流用完要及时关闭 ms.Close(); //加载图片 Bitmap bmp = new Bitmap(img); System.Drawing.Image tempimage = bmp; //原图宽、高 var imagewidth = tempimage.Width;//宽 var imageheight = tempimage.Height;//高 //原图目标坐标 var x1 = m_X; var y1 = m_Y; var x2 = x1 + m_W; var y2 = y1 + m_H; //画布宽高 double divWid = Convert.ToDouble(topCavWidth); double divHig = Convert.ToDouble(topCavHeight); //宽比例 double CompareWid = divWid / imagewidth; //高比例 double CompareHig = divHig / imageheight; //界面中坐标 cor.NewX1 = x1 * CompareWid; cor.NewY1 = y1 * CompareHig; cor.NewX2 = x2 * CompareWid; cor.NewY2 = y2 * CompareHig;
其实就是 先将坐标(x1,y1,W,H)转为两点式(x1,y1,x1+w,y1+h),再拿到 web界面的上的宽高/原图的宽高的比例,按照各自对应的比例进行乘法便可得到web界面上图片对应的坐标。
当我们拿到两组坐标,需要算重叠率时候,先将坐标转换为 Rectangle(
int
x,
int
y,
int
width,
int
height)
类型,再进行比较
public static float ComputRectJoinUnion(Rectangle rc1, Rectangle rc2) { Point p1 = new Point(); Point p2 = new Point(); ; //p1为相交位置的左上角坐标,p2为相交位置的右下角坐标 p1.X = Math.Max(rc1.X, rc2.X); p1.Y = Math.Max(rc1.Y, rc2.Y); p2.X = Math.Min(rc1.X + rc1.Width, rc2.X + rc2.Width); p2.Y = Math.Min(rc1.Y + rc1.Height, rc2.Y + rc2.Height); float AJoin = 0; if (p2.X > p1.X && p2.Y > p1.Y) //判断是否相交 { AJoin = (p2.X - p1.X) * (p2.Y - p1.Y); //如果先交,求出相交面积 } float A1 = rc1.Width * rc1.Height; float A2 = rc2.Width * rc2.Height; float AUnion = (A1 + A2 - AJoin); //两者组合的面积 if (AUnion > 0) return (AJoin / AUnion); //相交面积与组合面积的比例 else return 0; }
大家好,我是新来的小白,文未佳,却已创。转载请声明(博客园-郎中令)出处,谢谢
---市人皆大笑,举手揶揄之(手动链接博客园)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构