数字模板匹配问题(opencv)

liuyanxin11tan 2010-10-15 10:42:21
下面这段代码只能找出一处匹配区域,原因是使用了cvMinMaxLoc函数,我想问一下在opencv里面还有一种函数可以找出所有的匹配项吗?如果没有,请各位高手写一下自己的源代码好吧,急用,谢谢。
# include "cv.h"
# include "highgui.h"
# include "iostream"
using namespace std;

void L_TemplateMatch(IplImage* src,IplImage* tmp)
{
int w,h;
CvRect rect;
IplImage* result=NULL;
IplImage* srcGray=NULL;
IplImage* tmpGray=NULL;
double min_val;
double max_val;
CvPoint min_loc;
CvPoint max_loc;
CvPoint pt1;
CvPoint pt2;

w=src->width-tmp->width;
h=src->height-tmp->height;
result=cvCreateImage(cvSize(w+1,h+1),IPL_DEPTH_32F,1); //必须为32位浮点型,IPL_DEPTH_32F
srcGray=cvCreateImage(cvGetSize(src),8,1);
tmpGray=cvCreateImage(cvGetSize(tmp),8,1);
cvCvtColor(src,srcGray,CV_BGR2GRAY);
cvCvtColor(tmp,tmpGray,CV_BGR2GRAY);
cvMatchTemplate(srcGray,tmpGray,result,CV_TM_CCORR_NORMED);
//CV_TM_SQDIFF CV_TM_SQDIFF_NORMED CV_TM_CCORR (这三种Method的匹配效果不佳)
//CV_TM_CCORR_NORMED CV_TM_CCOEFF CV_TM_CCOEFF_NORMED (这三种Method的匹配效果完美)

cvMinMaxLoc(result,&min_val,&max_val,&min_loc,&max_loc,NULL);

rect=cvRect(max_loc.x,max_loc.y,tmp->width,tmp->height);
pt1=cvPoint(rect.x,rect.y);
pt2=cvPoint(rect.x+rect.width,rect.y+rect.height);
cvRectangle( src,pt1, pt2, cvScalar(255,0,0),1, 8, 0 );

cvReleaseImage(&srcGray);
cvReleaseImage(&tmpGray);
cvReleaseImage(&result);
}

void main()
{
IplImage* src=NULL;
IplImage* tmp=NULL;

cvNamedWindow("匹配结果",1);
//源图像
src=cvLoadImage("D:\\picture\\stuff.BMP",1);
//模板
tmp=cvLoadImage("D:\\picture\\jz.BMP",1);

L_TemplateMatch(src,tmp);
cvShowImage("匹配结果",src);
cvWaitKey(0);

cvDestroyWindow("匹配结果");
cvReleaseImage(&src);
cvReleaseImage(&tmp);
}
...全文
1131 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
艺术码匠 2010-11-18
  • 打赏
  • 举报
回复
据我所知,没有这样的函数,不过可以自己写,很简单的,把匹配度符合某个范围的区域都保存下来就行了。
liuyanxin11tan 2010-10-23
  • 打赏
  • 举报
回复
谢谢两位,我属于新手,自己还得下功夫。
dooX8086 2010-10-21
  • 打赏
  • 举报
回复
翻翻 icv 的手册看看有没有相关的函数。

但你能找到一处,就可以用循环来找到多处。
找到匹配区域处理完成后,用黑色(或透明)把源图中的这块区域填充。
再查找匹配.....同样处理
....直到没有匹配..

guangmingdeshenju 2010-10-21
  • 打赏
  • 举报
回复
还是 去 openCV专业 论坛问吧
这边 图像处理 不多

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧