繁体   English   中英

Emgu CV高分辨率图像拼接问题

[英]Emgu cv high resolution images stitching Issue

我正在使用EmguCV库来缝合图像。 它适用于小图像,但在处理高分辨率图像或20MB以上的图像时,即使我尝试处理30幅以上的图像,也会出现异常,但异常。

我正在使用的图书馆

Emgu.CV.UI
Emgu.CV.UI.GL
Emgu.CV.World
opencv_core2410
opencv_imgproc2410

List<Image<Bgr, Byte>> sourceImages = new List<Image<Bgr,byte>>();
foreach (string path in ImgPath)
    sourceImages.Add(new Image<Bgr, Byte>(path));
using (Stitcher stitcher = new Stitcher(false))
{
    using (VectorOfMat vm = new VectorOfMat())
    {
        Mat result = new Mat();
        vm.Push(sourceImages.ToArray());
        stitcher.Stitch(vm, result);
        if (result.Bitmap != null)
        {
            result.Bitmap.Save(Application.StartupPath + "\\imgs\\StitchedImage.png");
        }
        else
        {
            MessageBox.Show("Some thing went wrong"); return null;
        }
    }
}

例外

((Emgu.CV.MatDataAllocator)(result))._dataHandle.Target' threw an exception of type 'System.InvalidOperationException

图片 在此处输入图片说明 在此处输入图片说明

我相当确定您遇到了内存问题,因此我继续使用NuGet的最新EmguCV软件包(版本3.4.3.3016)并使用以下代码制作了一个针对.Net 4.7.2的简单控制台应用程序。有关Adobe样本数据的信息,可在此处下载。 如果我使用“ prefer 32 bit”作为“ AnyCPU”进行编译,并针对rio图像集运行此代码(出于测试目的,我加载了png的图像),然后让它运行,内存将缓慢上升,直到达到3 GB然后不久便崩溃,给出有关refcount的异常。 很明显是内存问题。 然后,我重新编译了针对64位的代码,并能够成功运行代码。 内存使用量达到了约6 GB的峰值。 因此,考虑到这一点,我可以肯定地说您的问题也与内存有关。 您尚未回答是否要构建64位应用程序的问题,但是根据您所看到的内容,我想您不是。 因此,解决问题的方法是编译为64位,然后确保您有足够的内存。 使用rio测试集,它跳升至接近6 GB。 没有您的图像,我无法告诉您它可能会增长多少,但是这些类型的操作占用大量内存,因此更好。 这样既可以解释大型图像文件的问题,也可以解释大量小型图像文件的问题。 我能够使用32位版本成功处理10到20张图像之间的图像集,但是由于内存需求,一旦移至50+张图像集,它就只能使用64位版本。

var images = Directory.EnumerateFiles(@"C:\test\adobe\rio", "*.png", SearchOption.TopDirectoryOnly).Select(x => new Mat(x)).ToArray();
using(var stitcher = new Stitcher(false))
{
    using (var vm = new VectorOfMat(images))
    {
        var result = new Mat();
        stitcher.Stitch(vm, result);
        result.Bitmap.Save(@"C:\test\adobe\rio_stitched.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
        result.Dispose();
    }
}
foreach (var image in images) { image.Dispose(); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM