opencv如何用模板匹配寻找目标
首先使用:
MatchTemplate
比较模板和重叠的图像区域
void cvMatchTemplate( const CvArr* image, const CvArr* templ, CvArr* result, int method );
- image
- 欲搜索的图像。它应该是单通道、8-比特或32-比特 浮点数图像
- templ
- 搜索模板,不能大于输入图像,且与输入图像具有一样的数据类型
- result
- 比较结果的映射图像。单通道、32-比特浮点数. 如果图像是 W×H 而 templ 是 w×h ,则 result 一定是 (W-w+1)×(H-h+1).
- method
- 指定匹配方法:
比较原图像和目标图像,然后使用:
MinMaxLoc
查找数组和子数组的全局最小值和最大值
void cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val,CvPoint* min_loc=NULL, CvPoint* max_loc=NULL, const CvArr* mask=NULL );
arr
输入数组, 单通道或者设置了 COI 的多通道。
min_val
指向返回的最小值的指针。
max_val
指向返回的最大值的指针。
min_loc
指向返回的最小值的位置指针。
max_loc
指向返回的最大值的位置指针。
mask
实例:
//进行模板匹配 cvMatchTemplate(src,templat,result,CV_TM_SQDIFF);
//第一次查找最小值 即找到第一个最像的目标 cvMinMaxLoc(result,&minVal,&maxVal,&minLoc,&maxLoc,NULL);
//绘制第一个查找结果到图像上 cvRectangle(show,minLoc,cvPoin(minLoc.x+templat->width,minLoc.y+templat->height),CV_RGB(0,255,0),1);