【问题标题】:Finding the top and bottom y coordinate of a opencv rectangle查找opencv矩形的顶部和底部y坐标
【发布时间】:2018-02-03 09:15:42
【问题描述】:

我想将these 2 个矩形合并为一个,例如this。我能想到的最简单的方法是获取顶部矩形的顶部 y 坐标和底部矩形的底部 y 坐标,并在cv2.rectangle() 中使用它们,但由于 for 循环,我无法同时获得这两点。

代码如下:

#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)

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

x1: 60  y1: 217  x2: 83  y2: 288
x1: 60  y1: 169  x2: 83  y2: 216
x1: 60  y1: 217  x2: 83  y2: 288
x1: 60  y1: 169  x2: 83  y2: 216...

谢谢。

编辑:我的solution

【问题讨论】:

    标签: python opencv computer-vision


    【解决方案1】:

    您可以使用“或”以更简单的方式来代替坐标。

    如果两个矩形都是opencv类型的rect,可以直接使用,

    result = rect1 | rect2;
    

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

    result = rect1 & rect2;
    

    这将为您提供两个矩形的交集。 Reference.

    【讨论】:

    • 但是如何给矩形起不同的名字呢?如果我按照你说的做,那就是result = rect | rect,因为rect 是我唯一的矩形图。如您所见:rect = cv2.rectangle(green_bar_win, (x1, y1), (x2, y2), (255,0,0), 2)
    • 我在 C++ 中使用过它。如果您想尝试这样做,请创建一个 rect 向量,然后在循环中推回它。最后你可以'或'所有的矩形。否则,请检查此LINK 以获取 python。
    【解决方案2】:

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

    1) 从图中可以很明显的看出两个矩形之间的距离很近。所以轮廓也必须非常接近。因此,在找到轮廓之前,对图像执行morphological transformations。大多数扩张会有所帮助。在链接中找到此操作的工作原理。

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

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

    希望这会有所帮助!

    【讨论】:

    • 我实际上是在尝试找到大矩形的中心点,并且在发布我的问题后我一直在思考,如果我计算 2 个较小矩形的中心并将它们取平均值,它会起作用吗?我想这会容易得多,因为 x 坐标永远不会改变,所以我只处理两个 'y' 坐标。
    • 如果您非常确定只会检测到这两个矩形。您可以很好地将它们合并。或者像这样找到大矩形的中心点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2021-01-12
    相关资源
    最近更新 更多