我有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
答案 0 :(得分:0)
您可以使用此方法:
1)-使用概率或LSD的霍夫线检测线
2)-创建一些规则以合并这些行
3)-计算交集。
4)-推导矩形角。
或者使用一些基于旋转/比例不变边缘的模板匹配。