rectangle函数opencvopencv模板匹配
OpenCV(Open Source Computer Vision)是一个基于BSD授权的开源计算机视觉库,它包含了数百个可用于处理视觉问题的算法。模板匹配是其中一个重要的算法,它可以在一张大图像中到一张小图像的位置,常用在目标检测、物体跟踪、图像分割等领域。
一、模板匹配原理
模板匹配的原理是在大图像中搜索与小图像相同的像素块,从而到小图像在大图像中的位置。其中,搜索过程需要根据各种匹配方法计算匹配程度,并选取最佳匹配结果。
比较常用的匹配方法有以下几种:
1.平方差匹配(SQDIFF)
计算小图像与搜索窗口中像素值之间的平方差,即
D(x,y)=∑(T(i,j)−I(x+i,y+j))^2
其中,T(i,j)和I(x+i,y+j)分别表示小图像和搜索窗口中的像素值,x和y表示搜索窗口左上角在大图像中的坐标。
2.标准化互相关匹配(NORMED_CORRELATION)
计算小图像与搜索窗口中像素值的相关系数,即
D(x,y)=∑(T(i,j)−μ_T)(I(x+i,y+j)−μ_I)/sqrt(σ_T^2σ_I^2)
其中,μ_T、μ_I、σ_T^2、σ_I^2表示小图像和搜索窗口的均值和方差。
3.相关匹配(CORRELATION)
计算小图像与搜索窗口中像素值的相关性,即
D(x,y)=∑(T(i,j)−μ_T)(I(x+i,y+j)−μ_I)
其中,μ_T、μ_I分别表示小图像和搜索窗口的均值。
4.归一化平方差匹配(NORMED_SQDIFF)
计算小图像与搜索窗口中像素值之间的平方差,并对结果进行归一化,即
D(x,y)=∑(T(i,j)−I(x+i,y+j))^2/∑T(i,j)^2
其中,T(i,j)和I(x+i,y+j)分别表示小图像和搜索窗口中的像素值。
二、模板匹配实现
在OpenCV中,可以调用函数cv::matchTemplate实现模板匹配。函数的定义如下:
void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method, InputArray mask=noArray());
其中,image表示大图像,templ表示小图像,result表示匹配结果(输出),method表示匹配方法,mask表示掩码图像,可指定用于排除不感兴趣的区域。
以下是具体的使用方法:
1.加载图像数据
Mat img = imread("image.png");
Mat templ = imread("template.png");
2.定义匹配结果矩阵
Mat result;
int result_w = ls - ls + 1;
int result_h = ws - ws + 1;
ate(result_h, result_w, CV_32FC1);
3.进行模板匹配操作
matchTemplate(img, templ, result, TM_CCOEFF_NORMED);
其中,TM_CCOEFF_NORMED表示使用归一化互相关匹配方法。
4.查最佳匹配结果
double minVal,maxVal;
Point minLoc,maxLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
其中,minVal和maxVal分别为最小匹配值和最大匹配值,minLoc和maxLoc分别表示最小匹配位置和最大匹配位置。
5.在图像中标记匹配结果
rectangle(img, maxLoc, Point(maxLoc.ls,maxLoc.ws), Scalar(0,0,255), 2);
其中,rectangle函数用于在图像上画矩形,第一个参数表示图像,第二个参数表示矩形的左上角坐标,第三个参数表示矩形的右下角坐标,第四个参数表示矩形的颜,第五个参数表示线宽。
三、模板匹配应用
模板匹配的应用范围非常广泛,下面介绍一些具体的应用场景。

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