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() }); }