rectangle函数opencvOPENCV_PYTHONCV2.MATCHTEMPLATE()函数学习反思
**
OPENCV_PYTHON CV2.MATCHTEMPLATE()函数学习反思
**
学习到这个函数⽅法时,我对该函数返回值产⽣了兴趣
result = cv2.matchTemplate(img, template, cv2.TM_SQDIFF_NORMED)
res 究竟是什么?
先看⽂档
result = cv.matchTemplate(target,tpl,md)
image参数表⽰待搜索源图像,必须是8位整数或32位浮点。
templ参数表⽰模板图像,必须不⼤于源图像并具有相同的数据类型。
method参数表⽰计算匹配程度的⽅法。
result参数表⽰匹配结果图像,必须是单通道32位浮点。
如果image的尺⼨为W x H,templ的尺⼨为w x h,则result的尺⼨为(W-w+1)x(H-h+1)。
其中result是模板图像去匹配的区域位置图像
这句话⼜是什么意思呢?
经过查取资料我知道了:
模板匹配函数cvMatchTemplate依次计算模板与待测图⽚的重叠区域的相似度,并将结果存⼊映射图像result当中,也就是说result图像中的每⼀个点的值代表了⼀次相似度⽐较结果。
这是在我的项⽬中打印出的result结果:
可以看出这是⼀个⼆维矩阵,每个值都是template与图像相同⼤⼩部分的匹配程度。
红⾊部分是template,以滑⾏的⽅式匹配各个位置算出匹配度。
如图可知,模板在待测图像上每次在横向或是纵向上移动⼀个像素,并作⼀次⽐较计算,由此,横向⽐较W-w+1次,纵向⽐较H-h+1次,从⽽得到⼀个(W-w+1)×(H-h+1)维的结果矩阵,result即是⽤图像来表⽰这样的矩阵,因⽽图像result的⼤⼩为(W-w+1)×(H-h+1)。
3.如何result中获得最佳匹配区域
使⽤函数cvMinMaxLoc(result,&min_val,&max_val,&min_loc,&max_loc,NULL);从result中提取最⼤值(相似度最⾼)以及最⼤值的位置(即在result中该最⼤值max_val的坐标位置max_loc,即模板滑⾏时左上⾓的坐标,类似于图中的坐标(x,y)。)再根据template的w,h参数就可以确定⽬标区域坐标位置,运⽤angle()画出图像即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。