Подобная проблема уже обсуждалась: Как распознать прямоугольники на этом изображении?
Что касается ваших данных, прямоугольники, которые вы пытаетесь найти, являются единственными черными объектами.Таким образом, вы можете попытаться выполнить пороговую бинаризацию: черные пиксели - это те, у которых ВСЕ три значения RGB меньше 40 (я нашел это эмпирически).Эта простая операция делает вашу картинку похожей на это:
После этого вы можете применить преобразование Хафа, чтобы найти строки (обсуждаемые в теме, на которую я ссылался)Или вы можете сделать это проще.Вычислить интегральные проекции черных пикселей на оси X и Y.(Проекция на X является вектором x_i - числа черных пикселей, для которого первая координата равна x_i).Таким образом, вы получаете возможные значения x и y как пики проекций.Затем просмотрите все возможные сегменты, ограниченные найденными x и y (если между (x_i, y_j) и (x_i, y_k) много черных пикселей, вероятно, есть линия).Наконец, составьте отрезки в прямоугольники!