我试图创建一个视差图像从两个立体声图像使用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());我正在显示带有mat类型的消息框,因为我过去经常得到以下错误:
“两个输入图像都必须有CV_8UC1”
我更改了ImreadMode,直到它起作用为止,而IgnoreOrientation因某种原因而起作用。
现在我得到了这个错误:
“>输入图像的不支持深度: 第五章:包含(深度) 哪里 再评估“深度”为3 (CV_16S) “
最后一行。
那么什么深度会被接受,?如何相应地设置输出的深度?
(我在OpenCv上有大约4个小时的工作经验,很抱歉,如果这个问题是微不足道的,我在google上没有发现任何关于这个问题的信息)
发布于 2019-12-12 14:17:41
这样啊,原来是这么回事。
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);https://stackoverflow.com/questions/59197401
复制相似问题