查找opencv矩形的顶部和底部y坐标

时间:2018-02-02 02:04:34

标签: python opencv computer-vision

我想将these 2个矩形合并为一个,如this。我能想到的最简单的方法是获取顶部矩形的顶部 y 坐标和底部的 y 坐标,并在{{1}中使用它们但是由于 for loop ,我无法获得这两点。

以下是代码:

cv2.rectangle()

这是打印结果(它在循环的不同位置打印两个矩形的左上角和右下角矩形点的x,y坐标):

#Finding contours (always finds those 2 retangles + some noise):
_, conts, hierarchy = cv2.findContours(img_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for cnt in conts:
    area = cv2.contourArea(cnt)

    #filter all the noise
    if area > 20:

        x1, y1, w, h = cv2.boundingRect(cnt)
        x2 = x1 + w                           # (x1, y1) = top-left vertex
        y2 = y1 + h                           # (x2, y2) = bottom-right vertex
        cv2.rectangle(green_bar_win, (x1, y1), (x2, y2), (255,0,0), 2)
        print("x1:", x1, " y1:", y1, " x2:", x2, " y2:", y2)

感谢。

编辑:我的solution

2 个答案:

答案 0 :(得分:1)

您可以使用'或'以更简单的方式执行此操作,而不是使用坐标。

如果两个矩形都是opencv类型rect,你可以简单地使用,

result = rect1 | rect2;

这会给你一个包围两者的矩形。 同样,您可以执行其他操作,例如

result = rect1 & rect2;

那将给你两个矩形的内部部分。 Reference.

答案 1 :(得分:0)

有很多方法可以达到结果,其中一些方法如下:

1)从图像中可以清楚地看出,两个矩形彼此非常接近。所以轮廓也必须非常接近。因此,在找到轮廓之前,请对图像执行morphological transformations。大多数扩张会有所帮助。在链接中查找此操作的工作情况。

dilation = cv2.dilate(img,kernel,iterations = 1)

2)否则如果你只想组合矩形,你可以跟进这个link

希望这有帮助!