如何使用Emgu CV的GPU加速功能拼接1000张瓦片图像?
Emgu CV C#下GPU加速图像拼接方案求助
需要将1000张瓦片图像拼接为单张大图,当前使用Emgu CV处理速度无法满足需求,尝试GPU加速未成功,具体尝试了两种方案:
方案1:拼接VectorOfGpuMat报错
尝试直接用VectorOfGpuMat进行拼接,抛出错误OpenCV: Unknown/unsupported array type,代码如下:
private GpuMat DoStichingWork(VectorOfGpuMat images) { Brisk detector = new Brisk(); using (Stitcher stitcher = new Stitcher(Stitcher.Mode.Panorama)) using (WarperCreator warper = new SphericalWarperGpu()) { stitcher.SetFeaturesFinder(detector); stitcher.SetWarper(warper); using (VectorOfGpuMat vm = new VectorOfGpuMat()) { GpuMat output = new GpuMat(); vm.Push(images); var status = stitcher.Stitch(vm, output); if (status == Stitcher.Status.Ok) { return output; } else { return null; } } } }
方案2:GPU包装器未激活GPU
使用GPU包装器运行代码无报错,但GPU未被激活,速度没有提升,代码如下:
private Mat DoStichingWorkSimple(VectorOfMat images) { Brisk detector = new Brisk(); using (Stitcher stitcher = new Stitcher(Stitcher.Mode.Panorama)) using (WarperCreator warper = new SphericalWarperGpu()) { stitcher.SetFeaturesFinder(detector); stitcher.SetWarper(warper); using (VectorOfMat vm = new VectorOfMat()) { Mat output = new Mat(); vm.Push(images); var status = stitcher.Stitch(images, output); if (status == Stitcher.Status.Ok) { return output; } else { //lblStatus.Text = "Failed to stitch."; return null; } } } }
目前未在Emgu CV中找到基于CUDA的拼接方法,已知Python和C++可实现该功能,寻求C#下Emgu CV GPU拼接的可行方案。
使用的NuGet版本
- Emgu.CV: Version="4.7.0.5276"
- Emgu.CV.Bitmap Version="4.7.0.5276"
- Emgu.CV.runtime.windows.cuda Version="4.4.0.4099"
参考文档
- OpenCV Stitcher类文档
- Emgu CV Stitcher类文档
- Emgu CV CUDA命名空间文档
内容的提问来源于stack exchange,提问作者bmurf17
相关产品推荐
相关产品推荐

