首页 > 解决方案 > 给定网格点查找对应的矩形坐标

问题描述

我已经使用 openCV 处理了图像以获得图像模式。图像模式分别由 2个水平和垂直线的Python列表表示。线条代表图案的边界。

fx = horizontal lines fy = vertical lines

每个列表根据距图像左上角的距离按顺序排列。接下来,我使用以下方法来计算那些发现的线的交点:

def get_corners(fx,fy):
    corners = []
    for x_line in fx:
        for y_line in fy:
            corner = get_intersection(x_line,y_line)
            if corner is not None:
                corners.append(corner)

这应该给我corners(格式化:)(x,y)从左到右,从上到下的顺序。现在我想使用这些坐标从图像中裁剪出矩形。

列表的大小各corners不相同,模式堆叠,这意味着它们有共同点。给定点列表, 和线列表的大小fxfy

如何使用点来裁剪矩形?

get_corners()如果需要,请随时更改。

这是一个示例:模式检测在 2x2 中产生 4 个可能的矩形。这意味着列表points中总共有 9 个值。

Points: [[],[],[],
         [],[],[],
         [],[],[]]

我可以使用这样的方法裁剪第一个矩形:

x1,y1 = points[0] #top left corner of the first pattern
x2,y2 = points[5] #bottom right corner of the first pattern
#rectangle
rectange = img[y1:y2,x1:x2]

标签: python-3.xalgorithmopencv

解决方案


在这里在黑暗中刺伤,但这是你的中间形象吗?我还假设您要区分正方形和矩形,也就是说,您不需要正方形,只需要矩形。

在此处输入图像描述

如果是这种情况,我将使用以下步骤:

cnt_rectangles = 0
rectangle_list = []
for index in np.arange(len(points)-1):
   p = points[index]
   q = points[index+1]
   if (p[0] == q[0]) || p[1] == q[1]
       #the rectangle vertices must not have the same column or row. reject.
       continue
   else if abs(p[0] - q[0]) == abs(p[1] - q[1]):
       #this is a square. reject
       continue
   else:
       #this is a rectangle
       cnt_rectangels+=1
       rectangle_list.append((p, q))

推荐阅读