如何从EMGU CV中的图片框中读取图像

时间:2018-03-15 09:27:53

标签: c# image-processing emgucv

我试图从图片框中读取图像以使用EMGU执行功能匹配。下面是我从示例项目中获得的代码。

        Bitmap img = new Bitmap(pictureBox1.Image);
        Image<Bgr, byte> imgInput = new Image<Bgr, byte>(img);

        using (Mat modelImage = CvInvoke.Imread("C:\\model.jpg", ImreadModes.Color)) //works
        using (Mat observedImage = CvInvoke.Imread(imgInput, ImreadModes.Color)) //doesn't work
        {
            Mat result = DrawMatches.Draw(modelImage, observedImage, out matchTime);
            ImageViewer.Show(result, String.Format("Matched in {0} milliseconds", matchTime));

        }

当我给出CvInvoke.ImRead的路径时,它可以工作,但是如果我创建一个位图并使用该位图作为图像,则会出现错误,指出CvInvoke.ImRead有一些无效的参数。

如何从图片框中读取图像?

1 个答案:

答案 0 :(得分:0)

CvInvoke.Imread方法只能用于从文件中读取。第一个参数必须是文件名作为字符串。所以您可以按如下方式修改代码:

    Bitmap img = new Bitmap(pictureBox1.Image);
    Image<Bgr, byte> imgInput = new Image<Bgr, byte>(img);

    using (Mat modelImage = CvInvoke.Imread("C:\\model.jpg", ImreadModes.Color)) //works
    using (Mat observedImage = new Image<Bgr, byte>(img).Mat) //works too
    {
        Mat result = DrawMatches.Draw(modelImage, observedImage, out matchTime);
        ImageViewer.Show(result, String.Format("Matched in {0} milliseconds", matchTime));

    }