1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Drawing; using System.Linq; using System.Windows.Forms;
namespace OpenCvSharp_HoughCircles_霍夫圆检测 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { pictureBox1.Image = new Bitmap("test01.jpg"); Mat mat = new Mat("test01.jpg"); Mat matClone = mat.Clone(); Cv2.CvtColor(mat, mat, ColorConversionCodes.RGB2GRAY);
CircleSegment[] cs = Cv2.HoughCircles(mat, HoughMethods.Gradient, 1, 100, 100, 30, 40, 50);
Array.Sort(cs, (cs1, cs2) => { if (cs1 != null && cs1 != null) { if (cs1.Center.Y > cs2.Center.Y) return 1; else if (cs1.Center.Y == cs2.Center.Y) { if (cs1.Center.X < cs2.Center.X) return 1; else return -1; } else return -1; } return 0;
});
int index = 1; for (int i = 0; i < cs.Count(); i++) { Cv2.Circle(matClone, (OpenCvSharp.Point)cs[i].Center, (int)cs[i].Radius, new Scalar(255, 255, 0), 2); OpenCvSharp.Point temp = (OpenCvSharp.Point)cs[i].Center; temp.Y = temp.Y + 8; temp.X = temp.X - 8; if (i >= 9 && i < 99) { temp.X = temp.X - 10; } else if (i >= 99) { temp.X = temp.X - 23; } Cv2.PutText(matClone, (index++).ToString(), temp, 0, 1, new OpenCvSharp.Scalar(0, 0, 0), 2); } pictureBox2.Image = BitmapConverter.ToBitmap(matClone); } } }
|