使用Emgu CV比较两张图片

3
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() && src.size == dst.size”,我尝试通过更改枚举类型CMP_TYPE.CV_CMP_GE来解决问题,但是仍然存在相同的问题。
需要比较的图片如下:
第一张:box1.png
第二张(与第一张相同):box1_Same.png
第三张(不同于前两张):box2.png different image
1个回答

1
那个错误信息告诉你,你把两个不同尺寸的图像放入了一个需要输入图像具有相同尺寸的函数中。
如果你考虑一下这个函数的作用,它应该是有意义的。该函数逐像素比较两个图像。如何比较一个值和空白?这是没有定义的,因此该函数不允许出现这种情况。
在任何其他操作发生之前,该函数断言这个表达式为真:
src.depth() == dst.depth() && src.size == dst.size 在你的情况下,这是假的,一个异常被抛出到你的面前。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接