繁体   English   中英

如何使用opencv从python中的图像中找到矩形的坐标?

[英]how to find coordinates of the rectangles from image in python with opencv?

我在图像中有一些不完美的矩形,我需要使用 opencv 为 python 中的每个矩形设置一组坐标

我已经尝试过 Canny 边缘检测和使用的 findContours 但它提供的坐标比需要的多,因为矩形没有直线

我读过类似的问题,但没有得到正确的结果。 您能否提供带有代码的解决方案?

原始图像原来的 Canny边缘检测后Canny 边缘检测

如何从 Canny Edges 仅获取矩形的内边框? 由于每个矩形都有双边框,因此它提供的矩形数量超过了所需数量。

image = cv2.imread(OUTPUT_FILE)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.blur(gray, (5,5))

kernel = np.ones((5, 5), np.uint8)
closing = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)

edged = cv2.Canny(closing, 30, 200)
cv2.imshow("Canny", edged)
contours, hierarchy = cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

print(len(contours))

for c in contours:
    rect = cv2.minAreaRect(c)
    box = cv2.boxPoints(rect)

    for p in box:
        pt = (p[0],p[1])
        plt.scatter(p[0],p[1])

plt.show()

我认为这个问题可以使用 findContours() 来解决,具体取决于您的 OpenCV 版本,它会返回几个值,但其中一个始终是contours ,它是所有轮廓点的列表。 我经常使用的一个建议是计算所有轮廓点的质心。 这意味着我将沿x坐标的所有点求和,然后除以此特定轮廓的轮廓列表的长度,并对y坐标执行相同的操作。

您还可以使用boundingRect()函数,它将为您提供边界框左上角的 x,y 坐标,以及它的宽度和高度。 在上面的链接中,您可以找到关于该主题的非常好的教程。 我认为这个功能更适合你的问题。

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM