gpt4 book ai didi

image-processing - 如何检查一个轮廓是否嵌套/嵌入到opencv中

转载 作者:太空宇宙 更新时间:2023-11-03 20:42:01 26 4
gpt4 key购买 nike

我有两个轮廓,我想检查它们之间的关系(如果其中一个是嵌套的)。通常,我会使用 findContours具有 CV_RETR_TREE 检索模式的功能。然而,我从不同的来源获得了轮廓(使用 MSER 方法)。实际上,我不仅有轮廓,而且如果有帮助的话,还有区域 mask 。例如,假设我想分割字母“O”,那么我会有以下蒙版或轮廓:

1)

0 0 0 0 0 0
0 1 1 1 1 0
0 1 0 0 1 0
0 1 0 0 1 0
0 1 1 1 1 0
0 0 0 0 0 0

2)

0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 1 0 0
0 0 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0

如何轻松检查第二个轮廓是否在第一个轮廓内?我考虑过检查边界框之间的关系,但这并没有涵盖所有可能的情况。

最佳答案

使用cv::pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)知道轮廓中的一个点是否在另一个点的内部。

您必须检查边界情况(您选择的第一个点对两个多边形都是通用的,等等)

if(pointPolygonTest(contour, pointFromOtherContour, false) > 0)
{
// it is inside
}

该函数确定点是在轮廓内部、外部还是位于边缘上(或与顶点重合)。它相应地返回正(内部)、负(外部)或零(边缘)值

measureDist=false 时,返回值分别为+1、-1、0。否则,返回值是点和最近的轮廓边缘之间的有符号距离。

关于image-processing - 如何检查一个轮廓是否嵌套/嵌入到opencv中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8508096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com