ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenCV之字符轮廓、凸包和最小外接矩形

2021-11-01 13:33:46  阅读:184  来源: 互联网

标签:矩形 外接 标记 iw 凸包 OpenCV 轮廓


  1. 标记字符轮廓信息
    (1,从上至下,从左至右依次遍历图像。

    (2,如下图A所示, i w i_w iw​为遇到一个外轮廓点(其实上遍历过程中第一个遇到的白点即为外轮廓点),且没有被标记过,则给A一个新的标记号。我们从A点出发,按照一定的规则(这个规则后面详细介绍)将 i w i_w iw​所在的外轮廓点全部跟踪到,然后回到 i w i_w iw​点,并将路径上的点全部标记为A的标号。

    (3,如下图B所示,如果遇到已经标记过的外轮廓点 i w i_w iw​′,则从 i w i_w iw​′向右,将它右边的点都标记为 i w i_w iw​′的标号,直到遇到黑色像素为止。

    (4,如下图C所示,如果遇到了一个已经被标记的点 i n i_n in​,且是内轮廓的点(它的正下方像素为黑色像素且不在外轮廓上),则从 i n i_n in​点开始,跟踪内轮廓,路径上的点都设置为 i n i_n in​的标号,因为 i n i_n in​已经被标记过与 i w i_w iw​相同,所以内轮廓与外轮廓将标记相同的标号。

    (5,如下图D所示,如果遍历到内轮廓上的点,则也是用轮廓的标号去标记它右侧的点,直到遇到黑色像素为止。

    (6,结束。

  2. 寻找字符轮廓点集的凸包
    Jarvis’ March步进法
    时间复杂度:O(Sn)。(其中S是要求凸包上点的个数,n是轮廓点的个数)
    思路:

纵坐标最小的点一定是凸包上的点,例如图上的 P0。
从 P0的水平方向开始,按逆时针方向逐个找凸包上的点,每前进一步找到一个点,所以叫作步进法。
怎么找下一个点呢?利用夹角。假设现在已经找到 {P0,P1,P2} 了,要找下一个点:剩下的点分别和 P2 组成向量,设这个向量与向量P1P2的夹角为 β 。当 β 最小时就是所要求的下一个点了,此处为 P3 。
在这里插入图片描述

在这里插入图片描述

  1. 再求凸包的最小外接矩形

旋转卡(qiǎ)尺算法(Rotating calipers):是解决一些与凸包有关问题的有效算法,计算时就像一对平行卡尺卡住凸包旋转而得名。
把点到直线的距离化解为三角形的面积,再运用叉积进行比较。同时,凸包上的点依次与对应边产生的距离成单峰函数,面积上升到最高点后,又会下降。

几何定理:多边形的最小外接矩形的一条边必然与多边形的其中一条边共线
根据上面的定理,只需要枚举多边形的边,做外接矩形,比较外接矩的面积,选最小的那个。(因为是矩形,所以枚举旋转超过90度结束,之后的枚举都是重复的外接矩形)
在这里插入图片描述

标签:矩形,外接,标记,iw,凸包,OpenCV,轮廓
来源: https://blog.csdn.net/qq_35200351/article/details/121075006

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有