[英]how to find coordinates of the rectangles from image in python with opencv?
我在图像中有一些不完美的矩形,我需要使用 opencv 为 python 中的每个矩形设置一组坐标
我已经尝试过 Canny 边缘检测和使用的 findContours 但它提供的坐标比需要的多,因为矩形没有直线
我读过类似的问题,但没有得到正确的结果。 您能否提供带有代码的解决方案?
如何从 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.