无法使用OpenCV和Emgu实现图像拼接

时间:2019-03-28 08:40:15

标签: opencv emgucv image-stitching

我在Open CV上使用Emgu包装器来缝合平面(扫描模式)图像,就像我在c#中编码一样。这些图像是我的chrome窗口等的屏幕截图,在其中我向下滚动页面并拍摄了多个屏幕截图。我经历了已经在Stackoverflow上发布的各种问题。下面是我的代码,由于一些重复出现的异常,我无法获得预期的结果。

我的代码:

    private string StitchFirstNImages(List<Mat> matList, string result_name)
    {
        using (Stitcher stitcher = new Stitcher(Stitcher.Mode.Scans, true))
        using (AKAZEFeaturesFinder finder = new AKAZEFeaturesFinder())
        {
            stitcher.SetFeaturesFinder(finder);
            stitcher.WaveCorrection = false;
            stitcher.SetWarper(new PlaneWarper(1));
            using (VectorOfMat vm = new VectorOfMat())
            {
                Mat result = new Mat();
                for (int i = 0; i < matList.Count; i++)
                {
                    vm.Push(matList[i]);
                }

                Console.WriteLine("Started Stitching = "+ matList[0].ToString());
                Stitcher.Status status = stitcher.Stitch(vm, result);

                if (status != Stitcher.Status.Ok)
                {
                    Console.WriteLine("Can't stitch images, error code = " + status);
                    return String.Empty;
                }

                Emgu.CV.CvInvoke.Imwrite(result_name, result);
                Console.WriteLine("stitching completed successfully\n" + result_name + " saved!");
                return result_name;
            }
        }
    }

一些stackoverflow文章建议关闭WaveCorrection,但这对我没有帮助。我试图在此处提供一组63张图像(我的图像甚至可能包含100张图像)并将它们全部缝合在一起。我没有进行成对拼接。我的集合仅包含png images

使用的图像集:https://ankurqa.mangopulse.com/sf/MzYyNF8xMTIyMjg2

面对以下例外情况:

  

System.AccessViolationException
   HResult = 0x80004003
   Message =尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
   Source =无法评估异常源
   堆栈跟踪:   无法评估异常堆栈跟踪

     

无法分配xxxxxx字节

     

ERR_NEED_MORE_IMGS

我对缝合是陌生的,上面编写的代码是通过阅读多篇文章而得出的。

如果我用正确的方法做的话,有人可以建议吗? 如果需要更改功能查找器,请告诉我。 (我尝试过OrbFeaturesFinder,但再次遇到了上面提到的第一个异常)

我经历了多个stackoverflow问题,并尝试调整我的代码,但没有任何积极结果。

0 个答案:

没有答案