opencv中的模板匹配
2017-07-03 19:19
351 查看
一、函数:matchTemplate
二、调用方式:void matchTemplate( InputArray image, InputArray templ,OutputArray
result, int method );
三、参数说明:InputArray image :输入图像
InputArray templ:输入模板
OutputArray result 匹配结果矩阵
int method 匹配方式
匹配方式共有六种
a、平方差匹配
method=CV_TM_SQDIFF
这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大。
b、标准平方差匹配
method=CV_TM_SQDIFF_NORMED
<
b123
span style="line-height:17.4px;font-family:'Source Code Pro', monospace;white-space:pre;">这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.
c、标准相关匹配
method=CV_TM_CCORR_NORMED
这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.
d、标准相关匹配
method=CV_TM_CCORR_NORMED
e、相关匹配 method=CV_TM_CCOEFF
这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).
f、标准相关匹配
method=CV_TM_CCOEFF_NORMED
通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价).
最好的办
法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案.
四、参考案例
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main(int argc, char *argv[])
{
cv::Mat image = imread("D:\\test.png", cv::IMREAD_COLOR);
cv::Mat templateImage = imread("D:\\template.png", cv::IMREAD_COLOR);
int result_cols = image.cols - templateImage.cols + 1;
int result_rows = image.rows - templateImage.rows + 1;
cv::Mat result = cv::Mat(result_cols, result_rows, CV_32FC1);
cv::matchTemplate(image, templateImage, result, CV_TM_SQDIFF);
double minVal, maxVal;
cv::Point minLoc, maxLoc, matchLoc;
cv::minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
matchLoc = minLoc;
cv::rectangle(image, cv::Rect(matchLoc, cv::Size(templateImage.cols, templateImage.rows)), Scalar(0, 0, 255), 2, 8, 0);
imshow("", image);
}
五、结果及分析
结果从图中可以看出找到了模板在图像中的位置。opencv中的模板匹配的原理是将模板在图像中从左往右从上往下移动来计算匹配结果,
并将匹配结果存在矩阵中,这个矩阵的长宽正好等于图像的长宽减去模板长宽后加一。匹配完后用minMaxLoc()函数求这个矩阵中的最
大值和最小值来找到匹配的位置。
六、不足
opencv中的模板匹配中的模板和图像必须是一致(不能有旋转、缩放等变换),而商用软件halcon中的模板匹配可以匹配模板和图像之间有
旋转角的的情况,这严重限制了在机器视觉方面的使用。
二、调用方式:void matchTemplate( InputArray image, InputArray templ,OutputArray
result, int method );
三、参数说明:InputArray image :输入图像
InputArray templ:输入模板
OutputArray result 匹配结果矩阵
int method 匹配方式
匹配方式共有六种
a、平方差匹配
method=CV_TM_SQDIFF
这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大。
b、标准平方差匹配
method=CV_TM_SQDIFF_NORMED
<
b123
span style="line-height:17.4px;font-family:'Source Code Pro', monospace;white-space:pre;">这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.
c、标准相关匹配
method=CV_TM_CCORR_NORMED
这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.
d、标准相关匹配
method=CV_TM_CCORR_NORMED
e、相关匹配 method=CV_TM_CCOEFF
这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).
f、标准相关匹配
method=CV_TM_CCOEFF_NORMED
通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价).
最好的办
法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案.
四、参考案例
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main(int argc, char *argv[])
{
cv::Mat image = imread("D:\\test.png", cv::IMREAD_COLOR);
cv::Mat templateImage = imread("D:\\template.png", cv::IMREAD_COLOR);
int result_cols = image.cols - templateImage.cols + 1;
int result_rows = image.rows - templateImage.rows + 1;
cv::Mat result = cv::Mat(result_cols, result_rows, CV_32FC1);
cv::matchTemplate(image, templateImage, result, CV_TM_SQDIFF);
double minVal, maxVal;
cv::Point minLoc, maxLoc, matchLoc;
cv::minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
matchLoc = minLoc;
cv::rectangle(image, cv::Rect(matchLoc, cv::Size(templateImage.cols, templateImage.rows)), Scalar(0, 0, 255), 2, 8, 0);
imshow("", image);
}
五、结果及分析
结果从图中可以看出找到了模板在图像中的位置。opencv中的模板匹配的原理是将模板在图像中从左往右从上往下移动来计算匹配结果,
并将匹配结果存在矩阵中,这个矩阵的长宽正好等于图像的长宽减去模板长宽后加一。匹配完后用minMaxLoc()函数求这个矩阵中的最
大值和最小值来找到匹配的位置。
六、不足
opencv中的模板匹配中的模板和图像必须是一致(不能有旋转、缩放等变换),而商用软件halcon中的模板匹配可以匹配模板和图像之间有
旋转角的的情况,这严重限制了在机器视觉方面的使用。
相关文章推荐
- OpenCV_模板匹配(Template Matching)
- 尺度不变的模板匹配方法(opencv源码)
- OpenCV学习笔记(5)——模板匹配
- 要点初见:从旅行青蛙开始的OpenCV3中模板匹配的探索
- opencv 模板匹配matchTemplate研究之二
- opencv学习: 模板匹配函数matchTemplate
- opencv 模板匹配目标检测
- OpenCV-模板匹配
- 【OpenCV学习】模板匹配
- opencv 图像模板匹配
- OpenCV matchTemplate模板匹配
- python for OpenCV图像处理之模板匹配以及分水岭算法
- 【opencv】Template matching(模板匹配)
- OpenCV的模板匹配简单包装
- opencv学习-imgprocess-模板匹配matchTemplate
- 【OpenCV学习笔记】【算法学习】一(模板匹配)
- opencv的模板匹配
- opencv 模板匹配(cvMatchTemplate)
- OpenCV学习笔记[4]模板匹配
- opencv+python 机读卡识别之试错(一)模板匹配的数字识别