public MatchInfo GetMatchPos(string Src, string Template)
{
MatchInfo myMatchInfo = new MatchInfo();
Image<Bgr, byte> a = new Image<Bgr, byte>(Src);
Image<Bgr, byte> b = new Image<Bgr, byte>(Template);
Image<Bgr, byte> aa = new Image<Bgr, byte>(Src);
Image<Gray, float> c = new Image<Gray, float>(a.Width, a.Height);
c = a.MatchTemplate(b, TemplateMatchingType.CcorrNormed);
double min = 0, max = 0;
Point maxp = new Point(0, 0);
Point minp = new Point(0, 0);
CvInvoke.MinMaxLoc(c, ref min, ref max, ref minp, ref maxp);
//for (int i =0;i< c.; i++) {

//}
Console.WriteLine(max + "-" + maxp.X + "," + maxp.Y);
Console.WriteLine(min + "-"+minp.X + "," + minp.Y);
CvInvoke.Rectangle(aa, new Rectangle(maxp, new Size(b.Width, b.Height)), new MCvScalar(0, 0, 255), 3);
CvInvoke.Rectangle(aa, new Rectangle(minp, new Size(b.Width+13, b.Height+13)), new MCvScalar(0, 255, 255), 3);
Image<Gray, float> c1 = c;
int getcnt = 0;
Lab1:
c1 = getNextMinLoc(c1, maxp, (int)max, b.Width, b.Height);
CvInvoke.MinMaxLoc(c1, ref min, ref max, ref minp, ref maxp);
if (max < 0.95)
{
goto Lab2;
}
getcnt++;
if (getcnt > 10) {
goto Lab2;
}
Console.WriteLine(max + "-" + maxp.X + "," + maxp.Y);
CvInvoke.Rectangle(aa, new Rectangle(maxp, new Size(b.Width, b.Height)), new MCvScalar(0, 255, 0), 3);
goto Lab1;
Lab2:
myMatchInfo.matchMax = max;
myMatchInfo.matchMin = min;
myMatchInfo.matchPicture = aa;
myMatchInfo.matchRectangle = new Rectangle(maxp, new Size(b.Width, b.Height));
myMatchInfo.matchMaxLoc = maxp;
myMatchInfo.matchMinLoc = minp;
return myMatchInfo;
}
Image<Gray, float> getNextMinLoc(Image<Gray, float> result, Point maxLoc, int maxVaule, int templatW, int templatH)
{

// 先将第一个最大值点附近模板宽度和高度的都设置为最大值防止产生干扰
int startX = maxLoc.X- (templatW>>2);//
int startY = maxLoc.Y- (templatH >> 2);//
int endX = maxLoc.X+ (templatW >> 2);//
int endY = maxLoc.Y+ (templatH >> 2);//
if (startX < 0 || startY < 0)
{
startX = 0;
startY = 0;
}
if (endX > result.Width - 1 || endY > result.Height - 1)
{
endX = result.Width - 1;
endY = result.Height - 1;
}
int y, x;
for (y = startY; y < endY; y++)
{
for (x = startX; x < endX; x++)
{
CvInvoke.cvSetReal2D(result, y, x, maxVaule);
}
}

return result;

}

C# emgu 多模板匹配的更多相关文章

  1. 使用OpenCV&&C++进行模板匹配.

    一:课程介绍 1.1:学习目标 学会用imread载入图像,和imshow输出图像. 用nameWindow创建窗口,用createTrackbar加入滚动条和其回调函数的写法. 熟悉OpenCV函数 ...

  2. halcon三种模板匹配方法

    halcon有三种模板匹配方法:即Component-Based.Gray-Value-Based.Shaped_based,分别是基于组件(或成分.元素)的匹配,基于灰度值的匹配和基于形状的匹配,此 ...

  3. opencv 模板匹配与滑动窗口(单匹配) (多匹配)

    1单匹配: 测试图片:   code: #include <opencv\cv.h> #include <opencv\highgui.h> #include <open ...

  4. opencv 在工业中的应用:模板匹配

    模板匹配在工业中经常有两个用途,一模板匹配进行产品定位,二根据匹配度来判断是OK的产品还是NG的产品.我用OPENCV做了个模板匹配定位的DEMO. (1)点击打开图像按钮打开一幅图像 (2)点击定义 ...

  5. opencv如何用模板匹配寻找目标

    首先使用: MatchTemplate 比较模板和重叠的图像区域 void cvMatchTemplate( const CvArr* image, const CvArr* templ, CvArr ...

  6. [模式识别].(希腊)西奥多里蒂斯&lt;第四版&gt;笔记8它__模板匹配

      在语音识别方面,同样的话都是同一个人,每次说的情况是不同的,难以识别.本章是定义如何适应不同的情况有不同的特性指标. 1,基于最优路径搜索的度量:①贝尔曼最优性原则和动态编程②编辑距离(The E ...

  7. OpenCV探索之路(九):模板匹配

    模板匹配的作用在图像识别领域作用可大了.那什么是模板匹配? 模板匹配,就是在一幅图像中寻找另一幅模板图像最匹配(也就是最相似)的部分的技术. 说的有点抽象,下面给个例子说明就很明白了. 在上面这幅全明 ...

  8. OpenCV 学习笔记(模板匹配)

    OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...

  9. halcon 模板匹配(最简单)

    模板匹配是机器视觉工业现场中较为常用的一种方法,常用于定位,就是通过算法,在新的图像中找到模板图像的位置.例如以下两个图像.   这种模板匹配是最基本的模板匹配.其特点只是存在平移旋转,不存在尺度变化 ...

随机推荐

  1. 【tool】部署前端工具

    一.部署前端工具如下: nodejsnpmwebpackvue 二.安装nodejs 1. 下载稳当版本nodejs 2. 配置环境变量 NODE_HOME=D:\soft\nodejs\ path= ...

  2. Linux(Ubuntu)使用日记------Mysql编码(utf-8)的设置

    Mysq版本:5.7.21 操作系统:Linux(Ubuntu) 整个操作的基本思路如下(包括问题的解决思路,想要直接解决问题的可以先看最后的命令总结) 检查mysql编码 找到Mysql的配置文件 ...

  3. RabbitMQ消息队列

    RabbitMQ消息队列 !!!  注意,保证服务器的内存足够,磁盘足够,以及删除/etc/hosts中没有用的dns解析 # 优点,能够保证消息数据持久化,不丢失,支持高并发 安装学习rabbitm ...

  4. 偶写的第一个控件,一个用选择代替输入的Edit控件…

    FDataSource :=TDataSource.Create(self); FDBGrid.FreeNotification(self); FADOQuery.FreeNotification(s ...

  5. Java中的Null是什么?

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  6. PLC 数据类型

    类型 长度(位) 取值范围 描述 BOOL 1 0/1 布尔型 BYTE 8 0x00~0xFF 十六进制数 WORD 16 0~65535 无符号整数 DWORD 32 0~4294967295 无 ...

  7. 百度编辑器html网页显示

    $(function () { var ue = UE.getEditor('content',{ serverUrl:'{:\\think\\Url::build("Ueditor/ind ...

  8. bean属性复制到另外一个bean

    import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(maker.getBaseInfo(), newBasInfo ...

  9. Dlib Opencv cv2.fitEllipse用于人眼轮廓椭圆拟合

    dlib库的安装以及人脸特征点的识别分布分别在前两篇博文里面 Dlib Python 检测人脸特征点 Face Landmark Detection Mac OSX下安装dlib (Python) 这 ...

  10. CF1152 F. Neko Rules the Catniverse (dp)

    题意 一条长为 \(n\) 的数轴,可以从任意整点 \(\in [1, n]\) 出发,假设当前在 \(x\) ,下一步能到达的点 \(y\) 需要满足,\(y\) 从未到过,且 \(1 \le y ...