Я хочу получить прямоугольник поверхности стола. Поэтому я подумал, что смогу сделать это с помощью opencv с помощью функций findContours и contourArea. Теперь, когда результатом является то, когда я беру максимальное значение contourArea, оно принимает все как область. Когда я этого не делаю, это дает другой результат, см. Изображения.
Есть ли способ объединить прямоугольники, чтобы он обнаруживал стол как поверхность? Потому что я хочу знать, находятся ли эти вещи на поверхности или удалены от поверхности.
Код:
import cv2
import numpy as np
file = "/Users/mars/Downloads/table.jpg"
im1 = cv2.imread(file, 0)
im = cv2.imread(file)
ret, thresh_value = cv2.threshold(im1, 180, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((5, 5), np.uint8)
dilated_value = cv2.dilate(thresh_value, kernel, iterations=1)
contours, hierarchy = cv2.findContours(dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]
max_index = np.argmax(areas)
cnt = contours[max_index]
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite('result.jpg', im)