#c# #opencv #opencvsharp
#c# #opencv
Вопрос:
У меня есть серия изображений, таких как:
Я хочу удалить все эти маленькие неправильные формы, чтобы получить только большую круглую форму.
Я попытался снизить шум:
Cv2.FastNlMeansDenoising(myMat, myMat,h:3);
Но хороших результатов не получается, и процесс замедляется, поэтому, похоже, ему нужна другая обработка, поэтому я попробовал, расширить и размыть:
int erosionSize = 2;
Mat element = Cv2.GetStructuringElement(MorphShapes.Cross,
new OpenCvSharp.Size(2 * erosionSize 1, 2 * erosionSize 1),
new OpenCvSharp.Point(erosionSize, erosionSize));
Cv2.Dilate(myMat, myMat, element, iterations: 2);
Cv2.Blur(myMat, myMat, new OpenCvSharp.Size(9, 9));
но получается что-то вроде
Я думаю, возможно, использование hsv или чего-то еще помогло бы, какой подход был бы лучшим?
Комментарии:
1. Взгляните на
cv2.HoughCircles()
2. @ZdaR Однажды я попробовал
HoughCircles
выполнить более простую задачу, и производительность на эллипсах (даже очень похожих на круги) была действительно плохой. Моим предложением здесь было бы какое-нибудь «умное» пороговое значение (нечто большее, чем простое двоичное пороговое значение), следующееfindContours
для определения самого большого контура. После этогоfitEllipse
может помочь проверить эллипсность этого контура.3. Вы можете использовать
cv2.adaptiveThreshold()
илиcv2.threshold()
сOTSU
. После получения двоичного изображения вы можете найти контуры и получить самый большой.