我在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问题,并尝试调整我的代码,但没有任何积极结果。