这是我参与更文挑战的第 10 天,活动详情查看: 更文挑战
什么是模板匹配?
模板匹配是一种用于在较大图像中搜索和查找模板图像位置的方法。OpenCV提供matchTemplate()
方法来实现模板匹配功能。模板匹配结果返回的是灰度图像,其中每个像素表示该像素的邻域与模板匹配程度。假设输入图像的大小(W * H),模板图像的大小为(w * h),则输出图像的大小将为(W – w + 1,H – h + 1)。获得结果后,可以使用minMaxLoc()
方法查找最大/最小值位置,并将其作为矩形的左上角,以(w,h)作为矩形的宽度和高度来确定模板匹配到的区域。
模板匹配原理
在要检测的图像上,从左到右,从上到下遍历这一幅图像,从上到下计算模板与重叠子图像的像素匹配度,如果匹配的程度越大,这说明相同的可能性越大。只是这个匹配度的计算有讲究。
API
public static void matchTemplate(Mat image, Mat templ, Mat result, int method, Mat mask)
复制代码
-
参数一:image,待匹配图像。必须是8位或者32位浮点图像。
-
参数二:templ,模板图像,类型与输入图像一致,并且大小不能大于源图像。
-
参数三:result,输出结果,必须是单通道32位浮点数,假设源图像
W*H
,模板图像w*h
, 则结果必须为(W-w+1)*(H-h+1)
的大小。 -
参数四:method,匹配方式标志位。若为TM_SQDIFF或者TM_SQDIFF_NORMED,计算值越小,匹配度越高,剩下的几个标志位,计算值越大,匹配度越高。
// C++: enum TemplateMatchModes public static final int TM_SQDIFF = 0, TM_SQDIFF_NORMED = 1, TM_CCORR = 2, TM_CCORR_NORMED = 3, TM_CCOEFF = 4, TM_CCOEFF_NORMED = 5; 复制代码
-
参数五:mask,可选掩码。必须和templ参数大小相同,要么和templ通道数相同,要么单通道。如果数据类型为#CV_8U,则将掩码解释为二进制掩码,表示仅使用掩码为非零的元素,并且权重与实际掩码值无关(一直等于1)。若数据类型为#CV_32F,掩码值将作为权重参与计算。
标记位
设
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐