模板匹配在opencv中无法正常工作。有办法解决这个问题吗?

时间:2014-06-10 09:00:04

标签: opencv

我正在使用opencv进行模板匹配。实际上我想通过将它与我拍摄的样本左手或右手模板进行比较来完全匹配人的左手或右手,并将他的手单独从原始图像中分离出来

以下函数用于模板匹配: -

public void Template_Matching(图像模板)

{

使用(图像结果= openCVImg.MatchTemplate(模板,Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF))

        {

            double[] minValues, maxValues;

            System.Drawing.Point[] minLocations, maxLocations;

            result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);

            var bytes = result.Bytes;

            if (maxValues[0] > 1.1)
            {
                istracking = true;

                // This is a match. Do something with it, for example draw a rectangle around it.
             //   System.Drawing.Rectangle match = new System.Drawing.Rectangle(maxLocations[0].X, maxLocations[0].Y, template.Width / 2, template.Height);
                System.Drawing.Rectangle match = new System.Drawing.Rectangle(new System.Drawing.Point(maxLocations[0].X, maxLocations[0].Y), new System.Drawing.Size(template.Width, template.Height));

                openCVImg.Draw(match, new Bgr(System.Drawing.Color.Red), 1);
                //   imageToShow.DrawPolyline(minLocations, false, new Bgr(System.Drawing.Color.Red), 3);

            }
            else
            {
                istracking = false;
            }

        }

    }

但上述功能无法正常工作。例如,如下图所示,

图1: - 我已经将手模板与显示手的人进行了比较。现在它正确匹配,矩形被绘制在人的手上。

图2: - 我把手模板与那个人的闭手进行了比较。但是这里突出了人的头部。(为什么?)

https://onedrive.live.com/redir?resid=D1FCABDC07D1ED9!1848&authkey=!AP54r_sg05PHhJY&ithint=folder%2c

考虑到人处于睡眠模式,我的目标是通过匹配任何其他人的右手模板的左手同时移除人的左手和右手。我想逐个像素地比较这些两张照片并完全从原始图像中移除左手和右手。

感谢您的快速回复。我试图首先上传图片,但它要求10个声誉。 实际上我正在比较原始图像和模板图像的精确图像。我的问题是,为什么它与颜色而不是形状进行比较。 所以我的目标就在这里,

考虑到人处于睡眠模式,我的目标是通过匹配任何其他人的右手模板的左手同时移除人的左手和右手。我想逐个像素地比较这些两张照片并完全从原始图像中移除左手和右手。

你能告诉我任何其他合适的方法吗?

1 个答案:

答案 0 :(得分:0)

睡觉时没必要,让我们考虑一个人躺着 在完美的照明条件下,我需要在他的左转,右转或直躺时确切地识别出该人的手。

模板匹配是否可行,或者我应该选择其他方法?