OpenCV 2 学习笔记(26): 自选区域进行模板匹配

本文介绍了如何使用OpenCV进行自选区域的模板匹配。通过设置鼠标回调函数,实现右键点击并滑动来选择感兴趣区域。文章详细解析了鼠标事件响应函数及其参数,并提供了相关资源链接以获取更多信息。
摘要由CSDN通过智能技术生成

          在定位中通常需要根据目标区域特征在图像中找出其正确的位置。使用比较多的方法还是模板匹配,模板匹配是根据区域的灰度值进行匹配,将结果存储在矩阵中,然后根据模板匹配所使用方法的不同寻找矩阵中最大值或者最小值就是最佳匹配。在opencv中使用cv::matchTemplate(src, temp, result, CV_TM_CCORR_NORMED);算子进行匹配。具体相关的解释见:http://blog.csdn.net/yang_xian521/article/details/6942194。

         模板匹配中第一步就需要寻找模板,一般情况下先需要自己手动寻找感兴趣区域进行寻找。可以使用opencv的highgui头文件进行可视化选取,然后再在图像中进行匹配。

但是模板匹配有明显的缺陷。其一鲁棒性较差,对光线或者灰度值比较敏感,所以才出来了许多归一化的模板匹配算法,用来减小光照对模板匹配算法的影响,在前面几节所讲解的直方图反向投影中也可以进行灰度匹配,但是其计算时间比较长。其次,不支持旋转与缩放匹配。这一节首先解决前面的问题,即自选取区域,然后模板匹配。首先看一下opencv中怎样根据鼠标动作自定义区域。

首先鼠标有三个动作,点击、滑动、松开。程序设计为当右键点击并且滑动时选定区域。鼠标监听响应函数为cv::SetMouseCallback().

C++: void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0 )

winname – 监听鼠标的窗口,这要求需要使用cv::namedWindow声明一个窗口。
onMouse – 鼠标操作响应函数.可以看例子http://code.opencv.org/projects/opencv/repository/revisions/master/entry/samples/cpp/ffilldemo. cpp
userdata – 传递给响应函数的参数.


响应函数应该为一下形式

void onMouse(int Event,int x,int y,int flags,void* param ) 

Event

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值