Emgu.CV中的视差图

时间:2016-09-28 16:37:38

标签: c# opencv emgucv

我尝试使用Emgu.CV

在C#中使用视差图计算

我将此article中的图像读取为bitmapLeft和bitmapRight。作为参考,我使用了here

中的示例代码

这是我的源代码:

var id_num = 1;
var picker = null;
$(function () {
$(document).on('click', ".repeat", function (e) {
    e.preventDefault();
    var $self = $(this);
    var $parent = $self.parent();
    if($self.hasClass("add-bottom")){
      $parent.after($parent.clone(true).attr("id", "repeatable" + id_num));
      id_num = id_num + 1;
      //picker = null;

    } else {
      $parent.before($parent.clone(true).attr("id", "repeatable" + id_num));
      id_num = id_num + 1;
      //picker = null;
    }
});   
});

但是,生成的位图全黑。

1 个答案:

答案 0 :(得分:0)

我认为你的问题就在最后。调用StereoMatcherExtentions.Comput的结果是一个深度为Cv16S的Mat / Image,我将其转换回Cv8U并能够显示它。这是我的例子。我使用了相同的两张图片。

    Mat leftImage = new Mat(@"C:\Users\jones_d\Desktop\Disparity\LeftImage.png", ImreadModes.Grayscale);
    Mat rightImage = new Mat(@"C:\Users\jones_d\Desktop\Disparity\\RightImage.png", ImreadModes.Grayscale);

    CvInvoke.Imshow("Left", leftImage);
    CvInvoke.Imshow("Right", rightImage);

    Mat imageDisparity = new Mat();
    StereoBM stereoBM = new StereoBM(16, 15);
    StereoMatcherExtensions.Compute(stereoBM, leftImage, rightImage, imageDisparity);

    Mat show = new Mat();

    imageDisparity.ConvertTo(show, DepthType.Cv8U);
    CvInvoke.Imshow("Disparity", show);

    CvInvoke.WaitKey(0);

以下是图片:

Left

Right

enter image description here

这似乎与Depth Map from Image

的结果相符

道格