图像中有一些不完美的矩形,我需要使用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()
答案 0 :(得分:0)
我认为可以使用findContours()解决此问题,具体取决于您的OpenCV版本,它返回几个值,但是其中一个始终是 contours ,它是所有点的列表轮廓我经常使用的一点建议是,我计算所有轮廓点的质心。这就是说,我沿 x 坐标对所有点求和,并对它们进行除以此特定轮廓的轮廓列表的长度,并对 y < / strong>坐标。
您还可以使用boundingRect()函数,该函数将为您提供边界框左上角的x,y坐标及其宽度和高度。在上面的链接中,您可以找到有关该主题的非常不错的教程。我认为此功能更适合您的问题。
祝你好运!