垫子深度错误(OpenCvSharp)

Wrong depth of Mat (OpenCvSharp)

我正在尝试使用 OpenCvSharp 从两个立体图像创建视差图像。

到目前为止,这是我的代码:

      Mat left = new Mat(fileName1, ImreadModes.IgnoreOrientation);
      Mat right = new Mat(fileName2, ImreadModes.IgnoreOrientation);
      Mat output = new Mat();

      right = right.Resize(left.Size());

      MessageBox.Show($"Type left: {left.Type()}, type right: {right.Type()}");

      StereoBM bm = StereoBM.Create(16, 15);
      OutputArray outArr = OutputArray.Create(output);
      bm.Compute((InputArray) left, (InputArray) right, outArr);
      Cv2.ImShow("output", outArr.GetMat());

我正在显示带有垫子类型的消息框,因为我曾经遇到过这个错误:

"Both input images must have CV_8UC1"

我更改了 ImreadMode 直到它起作用,并且 IgnoreOrientation 出于某种原因起作用。

现在我得到这个错误:

">Unsupported depth of input image:
     'VDepth::contains(depth)'
where
     'depth' is 3 (CV_16S)
"

在最后一行。

那么哪个深度会被接受如何相应地设置输出的深度


(我有大约 4 个小时的 OpenCv 经验,如果这个问题很简单,我很抱歉,我在 google 上没有找到任何相关信息)

我知道了。

StereoBM bm = StereoBM.Create(16, 13);
OutputArray outArr = OutputArray.Create(output);
bm.Compute((InputArray) left, (InputArray) right, outArr);
outArr.GetMat().ConvertTo(output, MatType.CV_8UC1);   //   <--- key line
Cv2.ImShow("output", output);