使用Emgu CV Comapare两张图片

时间:2017-07-06 06:55:33

标签: c# opencv image-processing

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Features2D;
using Emgu.CV.Structure;
using Emgu.CV.UI;
using Emgu.CV.Util;
using Emgu.CV.GPU;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                Image<Bgr, Byte> modelImage = new Image<Bgr, byte>("box1_Same.png");//child
                Image<Bgr, Byte> observedImage = new Image<Bgr, byte>("box2.png");//parent

                Image<Bgr, Byte> observedImagae = modelImage.Cmp(observedImage, CMP_TYPE.CV_CMP_GE);

               // Image<Bgr, Byte> Difference; //Difference between the two frames
               //Difference = modelImage.AbsDiff(observedImage);
            }
            catch (Exception ex)
            {

                throw;
            }
        }
    }
}

在上面的代码中,我使用CMP()方法进行两次图像比较“如果通过两个相同的图像进行比较,它就可以工作。” 如果传递两个不同的图像,它会给出以下异常 “OpenCV:src.depth()== dst.depth()&amp;&amp; src.size == dst.size” 我尝试通过更改枚举CMP_TYPE.CV_CMP_GE但提出相同的问题

box1.png

box1_Same.png

box2.png different image

1 个答案:

答案 0 :(得分:0)

该错误消息告诉您将两个不同大小的图像放入一个要求两个输入图像具有相同尺寸的函数中。

如果你考虑一下这个功能的作用,它应该是有意义的。该函数按像素比较两个图像。你如何比较价值与没有比较?这没有定义,因此该功能不允许这种情况。

该函数断言该表达式为真:

src.depth() == dst.depth() && src.size == dst.size

因为其他事情发生了。在你的情况下,这是假的,你的脸上会抛出异常。