检测共享边的矩形

时间:2019-08-26 19:26:26

标签: python opencv computer-vision

我有4个容器上方的深度图像,每个容器都有不同数量的子隔间。我需要找到四个容器中每个容器的外边缘的轮廓。

我已经对图像进行了阈值处理并获得了容器的轮廓,但是由于它们共享一条边缘,因此将它们分组在一起。如何跟踪每个容器的外边缘(或使用OpenCV自动在正确的位置分割轮廓?

depth_img = np.load(depth)
depth_thresh = cv2.threshold(depth_img, 1200, 255, cv2.THRESH_BINARY_INV)[1]
depth_close = cv2.morphologyEx(depth_thresh.astype(np.uint8), cv2.MORPH_CLOSE, np.ones((5,5),np.uint8))
depth_cnts = cv2.findContours(depth_close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
depth_cnts = imutils.grab_contours(depth_cnts)
for c in depth_cnts:
    cv2.drawContours(depth_img, [c], -1, (0, 255, 0), 2)
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.01*peri, True)
    for pt in approx:
        cv2.circle(depth_contours, (pt[0][0],pt[0][1]),5,colors,-1)

查看下面的图片

结果: Original depth image and results of thresholding and countour approx

期望的结果:Desired Results

1 个答案:

答案 0 :(得分:0)

您可以使用此方法:

1)-使用概率或LSD的霍夫线检测线
 2)-创建一些规则以合并这些行
 3)-计算交集。  4)-推导矩形角。

或者使用一些基于旋转/比例不变边缘的模板匹配。