Example #1
0
        /// <summary>
        /// 各チャンネルの画像を取得する
        /// </summary>
        void GetRGBHSV()
        {
            // RGB取得
            Mat[] srcBgrArray    = Cv2.Split(SrcBmp.ToMat());
            Mat[] targetBgrArray = Cv2.Split(TargetBmp.ToMat());

            // HSV取得
            Mat tempSrcHsv    = new Mat();
            Mat tempTargetHsv = new Mat();

            Cv2.CvtColor(SrcBmp.ToMat(), tempSrcHsv, ColorConversionCodes.BGR2HSV);
            Cv2.CvtColor(TargetBmp.ToMat(), tempTargetHsv, ColorConversionCodes.BGR2HSV);
            Mat[] srcHsvArray    = Cv2.Split(tempSrcHsv);
            Mat[] targetHsvArray = Cv2.Split(tempTargetHsv);

            // 格納
            SrcImages[R]    = srcBgrArray[2].ToBitmap();
            SrcImages[G]    = srcBgrArray[1].ToBitmap();
            SrcImages[B]    = srcBgrArray[0].ToBitmap();
            SrcImages[H]    = srcHsvArray[0].ToBitmap();
            SrcImages[S]    = srcHsvArray[1].ToBitmap();
            SrcImages[V]    = srcHsvArray[2].ToBitmap();
            TargetImages[R] = targetBgrArray[2].ToBitmap();
            TargetImages[G] = targetBgrArray[1].ToBitmap();
            TargetImages[B] = targetBgrArray[0].ToBitmap();
            TargetImages[H] = targetHsvArray[0].ToBitmap();
            TargetImages[S] = targetHsvArray[1].ToBitmap();
            TargetImages[V] = targetHsvArray[2].ToBitmap();
        }
Example #2
0
        /// <summary>
        /// マッチングボタンイベント
        /// </summary>
        private void button_ExeMatching_Click(object sender, EventArgs e)
        {
            try
            {
                // マスクに基づいて画像のクロップを行う
                int       x, y, width, height;
                Rectangle rect;

                // Src
                var maskBmpSrc = new Bitmap(SrcBmp.Width, SrcBmp.Height);
                x             = (int)(ShowingMaskSrcRect.X / ScaleSrc);
                y             = (int)(ShowingMaskSrcRect.Y / ScaleSrc);
                width         = (int)(ShowingMaskSrcRect.Width / ScaleSrc);
                height        = (int)(ShowingMaskSrcRect.Height / ScaleSrc);
                rect          = new Rectangle(x, y, width, height);
                CroppedSrcBmp = SrcBmp.Clone(rect, SrcBmp.PixelFormat);
                var resizedCroppedSrcBmp = ReduceImage(CroppedSrcBmp, 800, 800);

                // Target
                var maskBmpTarget = new Bitmap(TargetBmp.Width, TargetBmp.Height);
                x                = (int)(ShowingMaskTargetRect.X / ScaleTarget);
                y                = (int)(ShowingMaskTargetRect.Y / ScaleTarget);
                width            = (int)(ShowingMaskTargetRect.Width / ScaleTarget);
                height           = (int)(ShowingMaskTargetRect.Height / ScaleTarget);
                rect             = new Rectangle(x, y, width, height);
                CroppedTargetBmp = TargetBmp.Clone(rect, TargetBmp.PixelFormat);
                var resizedCroppedTargetBmp = ReduceImage(CroppedTargetBmp, 800, 800);

                // マッチング実行
                OneMatching = new Matching(resizedCroppedSrcBmp.ToMat(), resizedCroppedTargetBmp.ToMat(), FeatureRate);
                OneMatching.RunMutching();

                // 結果表示
                MatchingResultBmp = OneMatching.MatchingResultMat.ToBitmap();
                pictureBox_MatchingResult.Image = MatchingResultBmp;

                // 射影変換
                OneMatching.FitSrcToTarget();
                WarpedSrcBmp = OneMatching.WarpedSrcMat.ToBitmap();

                // 差分画像作成 画像が大きすぎると処理が遅いのである程度縮小する
                var subimage = new Form2(WarpedSrcBmp, resizedCroppedTargetBmp);
                subimage.Show();
            }
            catch (Exception)
            {
                MessageBox.Show("マッチング失敗");
            }
        }
Example #3
0
        /// <summary>
        /// 片っ端から画像を保存する
        /// </summary>
        public void SaveImages(string dir)
        {
            // フォルダの存在確認
            if (!System.IO.Directory.Exists(dir))
            {
                System.IO.Directory.CreateDirectory(dir);
            }

            SrcBmp.Save(dir + "SrcBmp.bmp", ImageFormat.Bmp);
            TargetBmp.Save(dir + "TargetBmp.bmp", ImageFormat.Bmp);

            SrcImages[R].Save(dir + "_SrcR.bmp", ImageFormat.Bmp);
            SrcImages[G].Save(dir + "_SrcG.bmp", ImageFormat.Bmp);
            SrcImages[B].Save(dir + "_SrcB.bmp", ImageFormat.Bmp);
            SrcImages[H].Save(dir + "_SrcH.bmp", ImageFormat.Bmp);
            SrcImages[S].Save(dir + "_SrcS.bmp", ImageFormat.Bmp);
            SrcImages[V].Save(dir + "_SrcV.bmp", ImageFormat.Bmp);

            TargetImages[R].Save(dir + "_TargetR.bmp", ImageFormat.Bmp);
            TargetImages[G].Save(dir + "_TargetG.bmp", ImageFormat.Bmp);
            TargetImages[B].Save(dir + "_TargetB.bmp", ImageFormat.Bmp);
            TargetImages[H].Save(dir + "_TargetH.bmp", ImageFormat.Bmp);
            TargetImages[S].Save(dir + "_TargetS.bmp", ImageFormat.Bmp);
            TargetImages[V].Save(dir + "_TargetV.bmp", ImageFormat.Bmp);

            SubImages[R].Save(dir + "_SubR.bmp", ImageFormat.Bmp);
            SubImages[G].Save(dir + "_SubG.bmp", ImageFormat.Bmp);
            SubImages[B].Save(dir + "_SubB.bmp", ImageFormat.Bmp);
            SubImages[H].Save(dir + "_SubH.bmp", ImageFormat.Bmp);
            SubImages[S].Save(dir + "_SubS.bmp", ImageFormat.Bmp);
            SubImages[V].Save(dir + "_SubV.bmp", ImageFormat.Bmp);

            BinImages[R].Save(dir + "_BinR.bmp", ImageFormat.Bmp);
            BinImages[G].Save(dir + "_BinG.bmp", ImageFormat.Bmp);
            BinImages[B].Save(dir + "_BinB.bmp", ImageFormat.Bmp);
            BinImages[H].Save(dir + "_BinH.bmp", ImageFormat.Bmp);
            BinImages[S].Save(dir + "_BinS.bmp", ImageFormat.Bmp);
            BinImages[V].Save(dir + "_BinV.bmp", ImageFormat.Bmp);

            MedianImages[R].Save(dir + "_MedianR.bmp", ImageFormat.Bmp);
            MedianImages[G].Save(dir + "_MedianG.bmp", ImageFormat.Bmp);
            MedianImages[B].Save(dir + "_MedianB.bmp", ImageFormat.Bmp);
            MedianImages[H].Save(dir + "_MedianH.bmp", ImageFormat.Bmp);
            MedianImages[S].Save(dir + "_MedianS.bmp", ImageFormat.Bmp);
            MedianImages[V].Save(dir + "_MedianV.bmp", ImageFormat.Bmp);

            DilatedImage.Save(dir + "_Dilated.bmp", ImageFormat.Bmp);
        }