示例#1
0
    // Use this for initialization
    void Start()
    {
        String[] textureNames = new string[] { "stitch1", "stitch2", "stitch3", "stitch4" };
        Mat[]    imgs         = new Mat[textureNames.Length];
        Mat      tmp          = new Mat();

        for (int i = 0; i < textureNames.Length; i++)
        {
            Texture2D tex = Resources.Load <Texture2D>(textureNames[i]);
            imgs[i] = new Mat();
            TextureConvert.Texture2dToOutputArray(tex, tmp);
            CvInvoke.Flip(tmp, tmp, FlipType.Vertical);
            CvInvoke.CvtColor(tmp, imgs[i], ColorConversion.Bgra2Bgr);
            if (imgs[i].IsEmpty)
            {
                Debug.Log("Image " + i + " is empty");
            }
            else
            {
                Debug.Log("Image " + i + " is " + imgs[i].NumberOfChannels + " channels " + imgs[i].Width + "x" + imgs[i].Height);
            }
        }
        Emgu.CV.Stitching.Stitcher stitcher = new Emgu.CV.Stitching.Stitcher();
        Mat result = new Mat();

        using (VectorOfMat vms = new VectorOfMat(imgs))
            stitcher.Stitch(vms, result);
        //CvInvoke.Flip(result, result, FlipType.Vertical);

        Texture2D texture = TextureConvert.InputArrayToTexture2D(result, FlipType.Vertical);

        RenderTexture(texture);
        ResizeTexture(texture);
    }
示例#2
0
文件: Stitch.cs 项目: neutmute/emgucv
   // Use this for initialization
   void Start()
   {  
		String[] textureNames = new string[] { "stitch1", "stitch2", "stitch3", "stitch4"};
		Mat[] imgs = new Mat[textureNames.Length];
		Mat tmp = new Mat ();
		for (int i = 0; i < textureNames.Length; i++) {
			Texture2D tex = Resources.Load<Texture2D>(textureNames[i]);
			imgs [i] = new Mat ();
			TextureConvert.Texture2dToOutputArray(tex, tmp);
			CvInvoke.Flip(tmp, tmp, FlipType.Vertical);
			CvInvoke.CvtColor (tmp, imgs [i], ColorConversion.Bgra2Bgr);
			if (imgs [i].IsEmpty)
				Debug.Log ("Image " + i + " is empty");
			else
				Debug.Log ("Image " + i + " is " + imgs[i].NumberOfChannels + " channels "  + imgs [i].Width + "x" + imgs [i].Height);
		}
		Emgu.CV.Stitching.Stitcher stitcher = new Emgu.CV.Stitching.Stitcher (false);
		Mat result = new Mat ();
		using (VectorOfMat vms = new VectorOfMat (imgs))
			stitcher.Stitch (vms, result);
		//CvInvoke.Flip(result, result, FlipType.Vertical);

		Texture2D texture = TextureConvert.InputArrayToTexture2D(result, FlipType.Vertical);

		this.GetComponent<GUITexture>().texture = texture;
		Size s = result.Size;
		this.GetComponent<GUITexture>().pixelInset = new Rect(-s.Width / 2, -s.Height / 2, s.Width, s.Height);

   }
示例#3
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            Mat cap = new Mat();

            Mat[] imgs   = new Mat[3];
            Mat   result = new Mat();

            cap             = c1.QueryFrame();
            imageBox1.Image = cap;
            imgs[0]         = cap;
            cap             = c2.QueryFrame();
            imageBox2.Image = cap;
            imgs[1]         = cap;
            cap             = c3.QueryFrame();
            imageBox3.Image = cap;
            imgs[2]         = cap;
            Emgu.CV.Stitching.Stitcher stitcher = new Emgu.CV.Stitching.Stitcher(true);
            using (VectorOfMat vms = new VectorOfMat())
            {
                vms.Push(imgs);
                bool stitchStatus = stitcher.Stitch(vms, result);
                if (stitchStatus)
                {
                    imageBox4.Image            = result;
                    toolStripStatusLabel1.Text = "Stitch OK";
                }
                else
                {
                    toolStripStatusLabel1.Text = "Stitch error";
                }
            }
        }
示例#4
0
      private void selectImagesButton_Click(object sender, EventArgs e)
      {
         OpenFileDialog dlg = new OpenFileDialog();
         dlg.CheckFileExists = true;
         dlg.Multiselect = true;

         if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
         {
            sourceImageDataGridView.Rows.Clear();

            Image<Bgr, byte>[] sourceImages = new Image<Bgr, byte>[dlg.FileNames.Length];
            
            for (int i = 0; i < sourceImages.Length; i++)
            {
               sourceImages[i] = new Image<Bgr, byte>(dlg.FileNames[i]);

               using (Image<Bgr, byte> thumbnail = sourceImages[i].Resize(200, 200, Emgu.CV.CvEnum.Inter.Cubic, true))
               {
                  DataGridViewRow row = sourceImageDataGridView.Rows[sourceImageDataGridView.Rows.Add()];
                  row.Cells["FileNameColumn"].Value = dlg.FileNames[i];
                  row.Cells["ThumbnailColumn"].Value = thumbnail.ToBitmap();
                  row.Height = 200;
               }
            }
            try
            {
               using (Stitcher stitcher = new Stitcher(true))
               {
                  using (VectorOfMat vm = new VectorOfMat())
                  {
                     Mat result = new Mat();
                     vm.Push(sourceImages);
                     Stitcher.Status stitchStatus = stitcher.Stitch(vm, result);
                     if (stitchStatus == Stitcher.Status.Ok)
                        resultImageBox.Image = result;
                     else
                     {
                        MessageBox.Show(this, String.Format("Stiching Error: {0}", stitchStatus));
                        resultImageBox.Image = null;
                     }
                  }
               }
            }
            finally
            {
               foreach (Image<Bgr, Byte> img in sourceImages)
               {
                  img.Dispose();
               }
            }
         }
      }
示例#5
0
        public async Task<Stream> StitchImages(List<string> imageUrls)
        {
            if (imageUrls == null || !imageUrls.Any())
            {
                return null;
            }

            var httpClient = new HttpClient();
            var imageStreams = new List<Stream>();

            foreach (var imageUrl in imageUrls)
            {
                var imageStream = await httpClient.GetStreamAsync(imageUrl);
                imageStreams.Add(imageStream);
            }

            var imageBitmaps = new List<Bitmap>();
            foreach (var imageStream in imageStreams)
            {
                var imageBitmap = new Bitmap(imageStream);
                imageBitmaps.Add(imageBitmap);
            }

            var emguImages = new List<Image<Bgr, byte>>();
            foreach (var imageBitmap in imageBitmaps)
            {
                var image = new Image<Bgr, byte>(imageBitmap);
                emguImages.Add(image);
            }

            var arr = new VectorOfMat();
            foreach (var emguImage in emguImages)
            {
                arr.Push(emguImage.Mat);
            }

            var stitchedImage = new Mat();

            using (var stitcher = new Stitcher(false))
            {
                stitcher.Stitch(arr, stitchedImage);
            }

            var resultMemStream = new MemoryStream();

            stitchedImage.Bitmap.Save(resultMemStream, ImageFormat.Jpeg);
            resultMemStream.Position = 0;

            return resultMemStream;
        }
示例#6
0
      private void selectImagesButton_Click(object sender, EventArgs e)
      {
         OpenFileDialog dlg = new OpenFileDialog();
         dlg.CheckFileExists = true;
         dlg.Multiselect = true;

         if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
         {
            sourceImageDataGridView.Rows.Clear();

            Image<Bgr, Byte>[] sourceImages = new Image<Bgr, byte>[dlg.FileNames.Length];
            
            for (int i = 0; i < sourceImages.Length; i++)
            {
               sourceImages[i] = new Image<Bgr, byte>(dlg.FileNames[i]);

               using (Image<Bgr, byte> thumbnail = sourceImages[i].Resize(200, 200, Emgu.CV.CvEnum.Inter.Cubic, true))
               {
                  DataGridViewRow row = sourceImageDataGridView.Rows[sourceImageDataGridView.Rows.Add()];
                  row.Cells["FileNameColumn"].Value = dlg.FileNames[i];
                  row.Cells["ThumbnailColumn"].Value = thumbnail.ToBitmap();
                  row.Height = 200;
               }
            }
            try
            {
               //using (Stitcher stitcher = new Stitcher(true))
               //CUDA bruteforce matcher seems to cause issue in this release, not using CUDA for matching for this reason
               using (Stitcher stitcher = new Stitcher(false))
               {
                  using (VectorOfMat vm = new VectorOfMat())
                  {
                     Mat result = new Mat();
                     vm.Push(sourceImages);
                     stitcher.Stitch(vm, result);
                     resultImageBox.Image = result;
                  }
               }
            }
            finally
            {
               foreach (Image<Bgr, Byte> img in sourceImages)
               {
                  img.Dispose();
               }
            }
         }
      }
        public async Task<HttpResponseMessage> GetPanoDemo()
        {
            try
            {
                var imgUrl1 = @"https://cs.brown.edu/courses/csci1950-g/results/proj6/edwallac/source001_01.jpg";
                var imgUrl2 = @"https://cs.brown.edu/courses/csci1950-g/results/proj6/edwallac/source001_02.jpg";

                var img1Stream = await(new HttpClient()).GetStreamAsync(imgUrl1);
                var img2Stream = await(new HttpClient()).GetStreamAsync(imgUrl2);

                var bitmap1 = new Bitmap(img1Stream);
                var bitmap2 = new Bitmap(img2Stream);

                var img1 = new Image<Bgr, byte>(bitmap1);
                var img2 = new Image<Bgr, byte>(bitmap2);

                var arr = new VectorOfMat();
                arr.Push(new[] { img1, img2 });

                var stitchedImage = new Mat();

                using (var stitcher = new Stitcher(false))
                {
                    stitcher.Stitch(arr, stitchedImage);
                }

                var resultMemStream = new MemoryStream();

                stitchedImage.Bitmap.Save(resultMemStream, ImageFormat.Jpeg);
                resultMemStream.Position = 0;

                var responseMessage = new HttpResponseMessage
                {
                    Content = new StreamContent(resultMemStream)
                    {
                        Headers =
                        {
                            ContentLength = resultMemStream.Length,
                            ContentType = new MediaTypeHeaderValue("image/jpeg"),
                            ContentDisposition = new ContentDispositionHeaderValue("attachment")
                            {
                                FileName = HttpUtility.UrlDecode("result.jpg"),
                                Size = resultMemStream.Length
                            }
                        }
                    }
                };

                return responseMessage;
            }
            catch (Exception e)
            {
                return new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    ReasonPhrase = e.Message
                };
            }
        }
示例#8
0
        private void ChangeState()
        {
            foreach (Control c in pnlCommand.Controls)
            {
                c.Enabled = !processing;
            }

            lblTimer.Enabled = true;
            captureToolStripMenuItem.Enabled = !processing;
            browseToolStripMenuItem.Enabled = !processing;
            resetToolStripMenuItem.Enabled = !processing;

            btnStitch.Enabled = true;

            if (processing)
            {
                btnStitch.Text = "&Stop";
                stitchToolStripMenuItem.Text = "&Stop";
                stitcher = new Stitcher(false);
            }
            else
            {
                btnStitch.Text = "&Stitch";
                stitchToolStripMenuItem.Text = "&Stitch";
                stitcher.Dispose();
            }
        }
示例#9
0
      public void TestStitching2()
      {
         Image<Bgr, Byte>[] images = new Image<Bgr, byte>[4];

         images[0] = EmguAssert.LoadImage<Bgr, Byte>("stitch1.jpg");
         images[1] = EmguAssert.LoadImage<Bgr, Byte>("stitch2.jpg");
         images[2] = EmguAssert.LoadImage<Bgr, Byte>("stitch3.jpg");
         images[3] = EmguAssert.LoadImage<Bgr, Byte>("stitch4.jpg");

         using (Stitcher stitcher = new Stitcher(false))
         using (OrbFeaturesFinder finder = new OrbFeaturesFinder(new Size(3, 1)))
         {
            stitcher.SetFeaturesFinder(finder);
            Mat result = new Mat();
            using (VectorOfMat vm = new VectorOfMat())
            {
               vm.Push(images);
               stitcher.Stitch(vm, result);
            }
            //Emgu.CV.UI.ImageViewer.Show(result);
         }
      }
示例#10
0
        private void buttonStitcher_Click(object sender, EventArgs e)
        {
            Image<Bgr, Byte>[] sources;
            OpenFileDialog open = new OpenFileDialog();
            open.CheckFileExists = true;
            open.Multiselect = true;
            open.Filter = "打开图片|*.jpg";
            open.ShowDialog();
            sources = new Image<Bgr, byte>[open.FileNames.Length];

            for (int i = 0; i < open.FileNames.Length; i++)
            {
                sources[i] = new Image<Bgr, byte>(open.FileNames[i]);
            }

            pictureBox1.Image = new Bitmap(sources[0].Bitmap,100,75);
            pictureBox2.Image = new Bitmap(sources[1].Bitmap, 100, 75);
            pictureBox3.Image = new Bitmap(sources[2].Bitmap, 100, 75);

            Stitcher stitcher = new Stitcher(false);
            Image<Bgr, byte> result = stitcher.Stitch(sources);
            pictureBoxAll.Image = new Bitmap(result.Bitmap, 800, 350);
        }
示例#11
0
      public void TestStitching4()
      {
         Mat[] images = new Mat[1];

         images[0] = EmguAssert.LoadMat("stitch1.jpg");
         

         using (Stitcher stitcher = new Stitcher(false))
         //using (OrbFeaturesFinder finder = new OrbFeaturesFinder(new Size(3, 1)))
         {
            //stitcher.SetFeaturesFinder(finder);
            Mat result = new Mat();
            using (VectorOfMat vm = new VectorOfMat())
            {
               vm.Push(images);
               stitcher.Stitch(vm, result);
            }
            //Emgu.CV.UI.ImageViewer.Show(result);
         }
      }
示例#12
0
 internal static extern void cveStitcherSetWaveCorrectionKind(IntPtr stitcher, Stitcher.WaveCorrectionType kind);
示例#13
-1
        public static bool Sticher(IEnumerable<string> fileList, string saveFileLocation)
        {
            var imageArray = from fileName in fileList
                             select new Image<Bgr, byte>(fileName);

            try
            {

                using (var stitcher = new Stitcher(false))
                {
                    using (var vm = new VectorOfMat())
                    {
                        var result = new Mat();
                        vm.Push(imageArray.ToArray());
                        stitcher.Stitch(vm, result);
                        result.Save(saveFileLocation);
                    }
                }

                return true;
            }
            catch (Exception ex)
            {
                Logger.Error("Failed to stich !!", ex);
                return false;
            }
            finally
            {
                foreach (Image<Bgr, Byte> img in imageArray)
                {
                    img.Dispose();
                }
            }
        }