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

连云港公司网站优化服务世界500强企业标准

连云港公司网站优化服务,世界500强企业标准,wordpress切换固定链接404,打广告型的营销网站原始的需求是使用OpenCV的直线检测算法(例如LSD)之后,得到一组线段。然后需要从这些线段得到类似矩形的四边形,用于检测经过透视变换的矩形物体。这些线段不一定首尾相接,彼此之间可能相交或有一定距离。 以下是需求图…

原始的需求是使用OpenCV的直线检测算法(例如LSD)之后,得到一组线段。然后需要从这些线段得到类似矩形的四边形,用于检测经过透视变换的矩形物体。这些线段不一定首尾相接,彼此之间可能相交或有一定距离。

以下是需求图:

使用从线段中寻找四边形的算法之后,得到了以下结果:

算法的步骤为:

1、从线段中挑出4条,顺序不同的组合只有3种。

2、对于每一种组合,由于每一条线段都有2个方向,那么就会有8种组合。

3、对于每一个组合,首先检查相邻线段的夹角,排除太小或太大的(相对于90度)。

4、继而检查相邻线段的顶点距离,排除距离太远的。

5、最后,求出四条相邻线段的交点,以这4个交点作为最终透视矩形的四个顶点。

算法代码如下:

/// <summary>
/// 线段组成四边形
/// </summary>
/// <param name="segs">线段列表</param>
/// <param name="maxDistSum">最大距离和</param>
/// <returns>四边形列表</returns>
public static List<PolygonScore> FormQuadrangle(Segment2D[] segs, double maxDistSum)
{int len = segs.Length;List<int[]> combines = new List<int[]>();for (int i = 0; i < len - 3; i++){for (int j = i + 1; j < len - 2; j++){for (int k = j + 1; k < len - 1; k++){for (int l = k + 1; l < len; l++){combines.Add(new int[] { i, j, k, l });combines.Add(new int[] { i, j, l, k });combines.Add(new int[] { i, k, j, l });}}}}List<RectInfo> rects = new List<RectInfo>();for (int i = 0; i < combines.Count; i++){int[] combine = combines[i];var seg1 = segs[combine[0]];var seg2 = segs[combine[1]];var seg3 = segs[combine[2]];var seg4 = segs[combine[3]];double cos1 = CosAngle(seg1.Vec, seg1.Length, seg2.Vec, seg2.Length);if (Math.Abs(cos1) > 0.5){continue;}double cos2 = CosAngle(seg2.Vec, seg2.Length, seg3.Vec, seg3.Length);if (Math.Abs(cos2) > 0.5){continue;}double cos3 = CosAngle(seg3.Vec, seg3.Length, seg4.Vec, seg4.Length);if (Math.Abs(cos3) > 0.5){continue;}double cos4 = CosAngle(seg4.Vec, seg4.Length, seg1.Vec, seg1.Length);if (Math.Abs(cos4) > 0.5){continue;}var doubleSegs = new Segment2D[] { seg1, seg1.Reverse(), seg2, seg2.Reverse(), seg3, seg3.Reverse(), seg4, seg4.Reverse() };bool found = false;for (int i1 = 0; i1 < 2; i1++){for (int i2 = 2; i2 < 4; i2++){double d1 = PointPoint(doubleSegs[i1].P2, doubleSegs[i2].P1);if (d1 > maxDistSum){continue;}for (int i3 = 4; i3 < 6; i3++){double d2 = PointPoint(doubleSegs[i2].P2, doubleSegs[i3].P1) + d1;if (d2 > maxDistSum){continue;}for (int i4 = 6; i4 < 8; i4++){double d3 = PointPoint(doubleSegs[i3].P2, doubleSegs[i4].P1);double d4 = PointPoint(doubleSegs[i4].P2, doubleSegs[i1].P1);double dd = d2 + d3 + d4;if (dd < maxDistSum){rects.Add(new RectInfo(new Segment2D[] { doubleSegs[i1], doubleSegs[i2], doubleSegs[i3], doubleSegs[i4] }, dd));found = true;}if (found){break;}}if (found){break;}}if (found){break;}}if (found){break;}}}rects.Sort();List<PolygonScore> polygons = new List<PolygonScore>();foreach (RectInfo rect in rects){polygons.Add(new PolygonScore(new Point2D[] {Intersect(rect.Segments[0],rect.Segments[1]),Intersect(rect.Segments[1],rect.Segments[2]),Intersect(rect.Segments[2],rect.Segments[3]),Intersect(rect.Segments[3],rect.Segments[0])}, rect.DistSum));}return polygons;
}

使用上面的代码对下图进行简单测试:

得到如下结果:

http://www.dtcms.com/wzjs/830210.html

相关文章:

  • 传统网站布局网页设计尺寸1080
  • 群晖系统可以做网站吗企业网站开发软件
  • 网站色差表洛阳网站建设外包
  • 网站建设费可分摊几年本科自考哪个专业比较好考
  • 如何自己开一个网站如何做网站的后台
  • 图片在线编辑网站秦皇岛是属于哪个省的城市
  • 万户网络的网站安全吗域名解析后怎么做网站
  • 网站制作公司官网首页app定制开发谈判技巧
  • 怎么建设自己产品网站哈尔滨网络科技公司网站
  • 服装商城网站建设方案广州 海珠 建网站
  • 分类目录网站怎么做人才招聘网站开发 源代码
  • 品牌网站建设坚持大蝌蚪太仓市住房和城乡建设局官方网站
  • 闸北区网站设计与制作网站开发设计文档模板
  • 成都有哪些网站建设优书网打不开了
  • 开发网站开票名称是什么徐州 商城网站设计
  • 如何进行网站推广活动过程品牌vi设计手册ppt
  • 汽修网站建设免费新桥网站建设
  • 比价网站怎么做的快手小程序开发教程
  • 国内网络科技网站建设wordpress博客广告代码
  • 微信网站怎么写seo是付费的吗
  • 有哪些做的好看的网站吗网站底部悬浮导航
  • 福州精美个人网站建设公司自己做章网站
  • 苏州园区网站开发世纪兴seo公司
  • 微信导航网站怎么做浅蓝色.net企业网站源码带后台
  • 科技网站设计公司有哪些中国菲律宾地图全图
  • 设计素材网站图片物流网站的建设实训
  • 响应式网站手机端尺寸wordpress搭建电影网
  • 在线动画手机网站模板域名注册网站建设网络实名
  • 网站备案时网站没有内容可以互联网站建设维护是做什么的
  • 网站建设工作建议北京好的网站建设