private void Click_テンプレート(object sender, EventArgs e) { if (テンプレート != null) { テンプレート = null; } テンプレート = new Mat[検査面数]; OpenFileDialog dialog = new OpenFileDialog() { Multiselect = true, // 複数選択の可否 Filter = // フィルタ "画像ファイル|*.bmp;*.gif;*.jpg;*.png|全てのファイル|*.*", }; //ダイアログを表示 DialogResult result = dialog.ShowDialog(); if (result == DialogResult.OK) { //OKボタンがクリックされたとき //選択されたファイル名をすべて表示する foreach (var file in dialog.FileNames.Select((value, index) => new { value, index })) { var index = file.index; テンプレート[index] = new Mat(file.value, ImreadModes.GrayScale); mycv.二値化(ref テンプレート[index], 254); } if (radioButton_テンプレート.Checked) { 表示画像更新(); } radioButton_テンプレート.Checked = true; } }
private void Click_二値(object sender, EventArgs e) { 二値化 = new Mat[検査面数]; if (TopHat != null) { foreach (var indexMat in TopHat.Select((mat, index) => new { mat, index })) { int index = indexMat.index; 二値化[index] = indexMat.mat.Clone(); MyCV.二値化(ref 二値化[index], int.Parse(textBox_二値.Text)); } Main.検査結果 = 二値化; if (radioButton_二値.Checked) { 表示画像更新(); } radioButton_二値.Checked = true; } }
private int[] 評価結果(Mat[] テンプレート, Mat[] 合成用素材, Mat[] 合成画像, int[][,] 正解座標, int p1, int p2, int p3, int p4, int p5) { MyCV MyCv = new MyCV(); int 検査面数 = テンプレート.Length; Mat[] dst = new Mat[検査面数]; int[] スコア等々 = { 0, 0, 0 }; int[] scores = new int[検査面数]; int[] uncorrects = new int[検査面数]; int[] unfinds = new int[検査面数]; int width = テンプレート[0].Width; int height = テンプレート[0].Height; if (合成用素材 != null) { for (int num = 0; num < 合成用素材.Length; num++) { if (num % 4 == 3) { dst[num / 4] = new Mat(height, width, MatType.CV_8UC1); Mat[] images = new Mat[4]; for (int i = 0; i < 4; i++) { images[i] = 合成用素材[num - i].Clone(); } MyCv.自作反射光除去(images, ref dst[num / 4]); MyCv.コントラスト調整(ref dst[num / 4], (double)(p1 / 10.0)); MyCv.明るさ調整(ref dst[num / 4], (double)p2); for (int i = 0; i < images.Length; i++) { images[i].Dispose(); } } } } else { dst = (Mat[])合成画像.Clone(); } for (int i = 0; i < 検査面数; i++) { MyCv.TopHat(dst[i].Clone(), ref dst[i], p3, p4); MyCv.二値化(ref dst[i], p5); MyCv.評価用画像作成(テンプレート[i], dst[i].Clone(), ref dst[i]); スコア等々 = MyCv.点数計算(dst[i], 正解座標[i]); scores[i] = スコア等々[0]; uncorrects[i] = スコア等々[1]; unfinds[i] = スコア等々[2]; //scores[i] = MyCv.点数計算(dst[i], 正解座標[i]); } //Console.WriteLine("score="+(int)scores.Average()+","+ (int)uncorrects.Sum()); for (int i = 0; i < dst.Length; i++) { if (dst[i] != null) { dst[i].Dispose(); } } MyCv = null; return(new int[] { (int)scores.Average(), (int)uncorrects.Sum(), (int)unfinds.Sum() }); }