簡體   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