У меня есть изображение, подобное этому:
Мне нужно подогнать эллипс к темной области (примечание: должен быть эллипс, а не круг). Каков наилучший способ сделать это в OpenCV? Моим первым шагом было применение к нему адаптивного (отсуского) порога, в результате чего:
Но я не уверен, куда идти дальше. Я пишу приложение на Python, но это больше дизайн алгоритма, который я ищу.
РЕДАКТИРОВАТЬ на основе ответа / комментария:
ОК, так что я уже попробовал морфологию. Основываясь на документации OpenCV , я выполнил 3-итерационную операцию «закрытия» над ним (расширение, затем эрозия), чтобы удалить мелкие частицы, в результате чего:
Затем, чтобы развернуть его ближе к исходной форме, я выполнил 3-итерационную операцию «открытия» (эрозия, затем растяжение), в результате чего:
Отсюда я сделал обнаружение края Канни, что привело к:
Теперь я использовал findContours
, но столкнулся с проблемой. Он обнаружил десятки контуров вдоль края, каждый из которых был коротким отрезком по окружности. Это означает, что даже если я возьму контур максимального размера, он может представлять только 10% длины окружности, что недостаточно для точного прилегания к эллипсу. Вот почему другие вопросы, предложенные @ Demi-Lune, не сработали для меня; все они имеют очень чистые, острые края, и findContours
находит хороший единственный контур, который покрывает весь периметр каждой фигуры, но этого не происходит для моего более грязного изображения. Итак, каков наилучший способ установить эллипс отсюда?