小编Spy*_*ros的帖子

Emgucv C# 图像稳定

我有两个连续的图像,我想在 C# 中使用 EmguCv 来稳定它们。

我找到了很多关于如何执行图像稳定的信息,但是我找不到任何关于如何使用 Emgu 稳定两个连续帧的详细说明(实际代码示例)。

我明白我必须执行以下操作:

  1. 使用 GFTTDetector() 计算第一帧的良好特征,并获得第一张图像(GFP1)的良好特征点。
  2. 然后我需要使用 CvInvoke.CalcOpticalFlowPyrLK() 计算光流以获得第二个图像 (GFP2) 的良好特征点。
  3. 使用 GFP1 和 GFP2,我可以使用 CvInvoke.cvFindHomography() 函数计算单应性矩阵。
  4. 最后我必须使用 CvInvoke.cvWarpPerspective() 来稳定框架。

所以基于以上我尝试进行图像稳定。

我有两个连续的帧:

Image<Gray, ushort> FirstImage = new Image<Gray, ushort>(Width, Height);
Image<Gray, ushort> SecondImage= new Image<Gray, ushort>(Width, Height);
Run Code Online (Sandbox Code Playgroud)

我尝试计算好的特征:

Emgu.CV.Features2D.GFTTDetector _GFTTdetector = new Emgu.CV.Features2D.GFTTDetector(500,0.05);
var GFP1 = _GFTTdetector.Detect(FirstImage);
Run Code Online (Sandbox Code Playgroud)

但是,当我调用 .Detect 时,我收到 OpenCV 异常,并且无法继续:

$Exception {"OpenCV: scn == 3 || scn == 4"} Emgu.CV.Util.CvException

有谁知道为什么我会得到这个例外?

此外,如果有人可以发布如何使用以下函数的示例代码,我将不胜感激,因为我不确定我将使用哪些输入参数:

  • CvInvoke.CalcOpticalFlowPyrLK()
  • CvInvoke.cvFindHomography()
  • CvInvoke.cvWarpPerspective()

最后 _GFTTdetector.Detect()返回一个KeyPoint[]类型,但是CvInvoke.CalcOpticalFlowPyrLK()只接受 …

c# image-processing emgucv image-stabilization

5
推荐指数
0
解决办法
1378
查看次数