// 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); }
// 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); }
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"; } } }
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(); } } } }
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; }
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 }; } }
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(); } }
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); } }
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); }
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); } }
internal static extern void cveStitcherSetWaveCorrectionKind(IntPtr stitcher, Stitcher.WaveCorrectionType kind);
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(); } } }