我想将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
答案 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
希望这有帮助!