在python opencv中查找骨架图像的交集

Jam*_*son 4 python opencv image-processing line-intersection opencv-contour

我有一个骨架图像(如下所示)。

骨架图像

我想得到线条的交点。我在下面尝试了以下方法,skeleton是一个 openCV 图像,算法返回一个坐标列表:

def getSkeletonIntersection(skeleton):
    image = skeleton.copy();
    image = image/255;
    intersections = list();
    for y in range(1,len(image)-1):
        for x in range(1,len(image[y])-1):
            if image[y][x] == 1:
                neighbourCount = 0;
                neighbours = neighbourCoords(x,y);
                for n in neighbours:
                    if (image[n[1]][n[0]] == 1):
                        neighbourCount += 1;
                if(neighbourCount > 2):
                    print(neighbourCount,x,y);
                    intersections.append((x,y));
    return intersections;
Run Code Online (Sandbox Code Playgroud)

它找到有两个以上相邻像素的白色像素的坐标。我认为这只会返回角落,但事实并非如此 - 它会返回更多点。

带有标记坐标的骨架

这是其检测到的点标记在图像上的输出。这是因为它检测到下面显示的一些不是相交的示例。

0 0 0    1 1 0    0 1 1
1 1 1    0 1 0    1 1 0
0 0 1    0 0 1    0 0 0
Run Code Online (Sandbox Code Playgroud)

还有更多的例子。是否有另一种方法我应该考虑检测交叉点。感谢所有输入和想法,谢谢。

Mar*_*ell 5

我不确定OpenCV 的功能,但您可能应该尝试使用此处描述的命中和未命中形态。

Read up on Line Junctions and see the 12 templates you need to test for:

在此处输入图片说明