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

时间:2019-04-25 00:32:30

标签: python opencv

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

我尝试了Canny边缘检测和使用过的findContours,但由于矩形没有直线,它提供的坐标超出了要求

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

原始图片 original Canny边缘检测后 Canny edge detection

如何仅从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()

1 个答案:

答案 0 :(得分:0)

我认为可以使用findContours()解决此问题,具体取决于您的OpenCV版本,它返回几个值,但是其中一个始终是 contours ,它是所有点的列表轮廓我经常使用的一点建议是,我计算所有轮廓点的质心。这就是说,我沿 x 坐标对所有点求和,并对它们进行除以此特定轮廓的轮廓列表的长度,并对 y < / strong>坐标。

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

祝你好运!