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

xdnvmnnf  于 2022-11-15  发布在  Python
关注(0)|答案(1)|浏览(364)

我有一些不完美的矩形在图像中,我需要一套坐标为每个矩形在python使用opencv
我尝试过Canny边缘检测和使用的findContours,但它给出的坐标比所需的多,因为矩形没有直线
我读过类似的问题,但我没有得到正确的结果。你能提供解决方案的代码?
原始图像

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()
oyxsuwqo

oyxsuwqo1#

我认为这个问题可以使用findContours来解决(),根据OpenCV的版本,它返回几个值,但其中一个总是contours,这是一个轮廓上所有点的列表。我经常使用的一点建议是计算所有轮廓点的质心。这意味着我将沿着x的所有点相加。坐标对它们求和,并除以此特定轮廓的轮廓列表的长度,并且对y坐标执行相同的操作。
你也可以使用boundingRect()函数,它会给予你边界框左上角的x,y坐标,以及它的宽度和高度。在上面的链接中,你可以找到一个关于这个主题的非常好的教程。我认为这个函数更适合你的问题。
祝你好运!

相关问题