очень простой подход, после того, как у вас есть ограничивающий прямоугольник прямоугольник вокруг фигуры, подсчитывают процент пикселей внутри коробки, которые являются белыми.
Чем выше процент белых пикселей, тем ближе к прямоугольнику.
Чтобы получить ограничивающие поля, вы должны взглянуть либо на findContours из opencv, либо на некоторый алгоритм извлечения Blob, вы найдете много вопросов относительно них.
Edit:
Может быть, вы должны сначала получить минимальные ограничивающие прямоугольники формы, а затем сделать этот вид эвристики:
- не Shrink размеров прямоугольника до белого пикселя процента внутри прямоугольник достигает определенного вами порогового значения (например, 90% белых пикселей внутри прямоугольника).
Чтобы получить минимальный ограничивающий прямоугольник (наименьший прямоугольник, который содержит всю форму), вы можете проверить этот учебник:
http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html
Одна вещь, которая может также помощь делает разницу размеров от минимального ограничивающего прямоугольника и максимального внутреннего прямоугольника (самый большой прямоугольник, который вы можете поместить в белую форму). Чем меньше различий между свойствами этого прямоугольника (ширина, высота, площадь, координаты центра), ближайшая форма к прямоугольнику.
findCountours всегда будет охватывать все белые пиксели, но некоторые белые пиксели не являются частью прямоугольника –
Непонятно, какие именно фигуры вы хотите рассматривать как «прямоугольники». Я могу сказать из вашего примера, что вы * не * ищете минимальный ограничивающий прямоугольник (самый маленький прямоугольник, который содержит всю форму), но это также не максимальный внутренний прямоугольник (самый большой прямоугольник, который вы можете поместить в белую фигуру). –