Я работал с OpenCV, чтобы обнаружить прямоугольное препятствие. Пока это изображение, которое я получаю после применения фильтров и canny.
Помеха, которую я пытаюсь определить, является горизонтальной, три вертикальных прямоугольника являются направляющими линиями на floor.My цель состоит в том, чтобы сохранить только горизонтальный прямоугольник, отделяя его от других, но после применения поиска Contours я получаю только один объект, который включает в себя все формы. Это код, который я использовал, чтобы найти только самые большие прямоугольник по их площади:
# find the biggest countour (c) by the area
if contours != 0:
if not contours:
print("Empty")
else:
bigone = max(contours, key=cv2.contourArea) if max else None
area = cv2.contourArea(bigone)
if area > 10000:
x, y, w, h = cv2.boundingRect(bigone)
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv2.putText(img, "Obstacle", (x+w/2, y-20),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
pts = np.array(
[[[x, y], [x+w, y], [x+w, y+h], [x, y+h]]], dtype=np.int32)
cv2.fillPoly(mask, pts, (255, 255, 255))
#values = img[np.where((mask == (255, 255, 255)).all(axis=2))]
res = cv2.bitwise_and(img, mask) # View only the obstacle
obs_area = w*h
print(obs_area)
if obs_area <= 168000:
command_publisher.publish("GO")
cv2.putText(
img, "GO", (380, 400), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 255), 1)
else:
command_publisher.publish("STOP")
cv2.putText(img, "STOP", (380, 400),
cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 255), 1)
# show the output image
cv2.imshow("Image", img)
cv2.waitKey(1)
И вот результат, который я получаю:
Есть ли способ разделения мое препятствие от линий на полу с каким-то фильтром или алгоритмом?
Вот пример изображения для работы: