Principe :
Le cercle dans le système de coordonnées rectangulaires peut être exprimé comme suit :
Équation des paramètres correspondants :
Pour une certaine coordonnée de pixel de point (x, y), sélectionnez différentes combinaisons de (a, b, r), vous pouvez obtenir (x, y) , dessinez des images dans le système de coordonnées a, b, r :
API :
public static CircleSegment[] HoughCircles(InputArray image, HoughModes method, double dp, double minDist, double param1 = 100, double param2 = 100, int minRadius = 0, int maxRadius = 0);
utiliser:
if (fileDialog.ShowDialog() == DialogResult.OK)
{
picFile = fileDialog.FileName;
inputMat = Cv2.ImRead(picFile, ImreadModes.Grayscale);
Mat finallyOutMate = Cv2.ImRead(picFile, ImreadModes.AnyColor);
var circles = Cv2.HoughCircles(inputMat, HoughModes.Gradient, 1, 10, 100, 100, 40, 800);
//绘制圆
Scalar scalar = new Scalar(255, 0, 0);
foreach (var m in circles)
{
Cv2.Circle(finallyOutMate, (int)m.Center.X, (int)m.Center.Y, (int)m.Radius, scalar,4);
}
picBox_Display.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(inputMat);
picBox_After.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(finallyOutMate);
}
Notes complémentaires :
La bibliothèque OpenCV utilisée dans .NET dans ce cas est OpenCvSharp4