垫子深度错误(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);
我正在尝试使用 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);