C#EMGU 3.1图像拼接方法参数

时间:2016-08-20 12:06:14

标签: c# emgucv

我正在尝试将多个图像拼接成单个(全景)图像。

以下代码在EMGU-2.4中正常工作但在EMGU-3.1中我在使用针法传递参数时遇到问题。

  // Collect all images
            List<Image<Bgr, Byte>> sourceImages = new List<Image<Bgr, Byte>>(); 

            for (int i = 1; i <7 ; i++)
            {
                string fileN = fl1 + "n (" + i.ToString() + ").jpg";
                sourceImages.Add(new Image<Bgr, Byte>(fileN));
            }

            try
            {
                using (Stitcher stitcher = new Stitcher(false))
                {
                    // Stitch images
                    Image<Bgr, Byte> result = stitcher.Stitch(sourceImages.ToArray());
                    Bitmap bm = result.ToBitmap();
                    bm.Save(fl1 + "resul.jpeg", ImageFormat.Jpeg);
                }
            }
            finally
            {

            }

EMGU-3.1文档:stitch方法包含如下所示的新参数

  //
        // Summary:
        //     Compute the panoramic images given the images
        //
        // Parameters:
        //   images:
        //     The input images. This can be, for example, a VectorOfMat
        //
        //   pano:
        //     The panoramic image
        //
        // Returns:
        //     true if successful
        public bool Stitch(IInputArray images, IOutputArray pano);

如何在现有代码中传递这两个参数以及这些参数是什么?

请问我对EMGU来说是新手

2 个答案:

答案 0 :(得分:2)

您可以传递Emgu.CV.Util.VectorOfMat作为输入并使用EMGU.CV.Mat来存储输出,如下所示:

using (Stitcher stitcher = new Stitcher(false))
{
    using (VectorOfMat vm = new VectorOfMat())
    {
        Mat result = new Mat();
        vm.Push(sourceImages);
        stitcher.Stitch(vm, result);
        resultImageBox.Image = result; //Display the result
    }
}

请注意,上面使用的“resultImageBox”是来自EMGU的ImageBox,但您可以使用PictureBox来显示result.Bitmap

此示例取自EMGU提供的Stitching示例,您可以在那里找到更多信息

答案 1 :(得分:1)

抱歉,我没有50个声誉因此我无法发表评论。否则我不会在这里发帖。 使用下面的代码,我遇到此错误消息:参数1 - 无法从&#39; System.Collections.Generic.List&gt;&#39;转换为&#39; Emgu.CV.Mat&#39;。错误来自&#34; vm.Push(sourceImages);&#34;

using (Stitcher stitcher = new Stitcher(false))
{
    using (VectorOfMat vm = new VectorOfMat())
    {
    Mat result = new Mat();
    vm.Push(sourceImages);
    stitcher.Stitch(vm, result);
    resultImageBox.Image = result; //Display the result
    }
}