예제 #1
0
        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;
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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() });
        }