OpenCV模板匹配matchTemplate

#include "CMainWindow.h"
#include <QString>
#include <QDebug>
#include<opencv2/opencv.hpp>

CMainWindow::CMainWindow(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	connect(ui.pushButton, &QPushButton::clicked, this, &CMainWindow::onBtnClick);
}

void CMainWindow::onBtnClick()
{
	//从本地读取图片
	cv::Mat srcImage = cv::imread("\\\\10.30.21.198\\UserDesktop01\\112760\\Desktop\\1.png", 1);
	cv::Mat templateImage = cv::imread("\\\\10.30.21.198\\UserDesktop01\\112760\\Desktop\\2.png", 1);

	//创建窗口显示图片
	//cv::imshow("srcImage", srcImage);
	//cv::imshow("templateImage", templateImage);

	//保存结果的矩阵  必须是单通道32位浮点。如果image的尺寸为W x H,templ的尺寸为w x h,则result的尺寸为(W-w+1)x(H-h+1)
	cv::Mat result;
	int result_cols = srcImage.cols - templateImage.cols + 1;
	int result_rows = srcImage.rows - templateImage.rows + 1;
	result.create(result_cols, result_rows, CV_32FC1);

	//method :模板匹配的算法
	enum { TM_SQDIFF = 0, TM_SQDIFF_NORMED = 1, TM_CCORR = 2, TM_CCORR_NORMED = 3, TM_CCOEFF = 4, TM_CCOEFF_NORMED = 5 };
	//TM_CCOEFF是相关性系数匹配;TM_CCOEFF_NORMED是标准相关性系数匹配。将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列)。
	cv::matchTemplate(srcImage, templateImage, result, TM_CCOEFF_NORMED);

	double minVal = -1;		//最小匹配系数
	double maxVal;			//最大匹配系数
	cv::Point minLoc;		//最小匹配系数的坐标
	cv::Point maxLoc;		//最大匹配系数的坐标
	cv::Point matchLoc;		//最佳匹配系数的坐标
	//result表示在每个点的匹配系数   通过该函数找到最佳的匹配系数和开始坐标
	minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat());

	//取大值(视匹配方法而定)
	//    matchLoc = minLoc;
	matchLoc = maxLoc;

	//取大值,值越小表示越匹配
	QString str = "Similarity:" + QString::number((maxVal) * 100, 'f', 2) + "%";
	qDebug() << str;

	cv::Mat mask = srcImage.clone();
	//绘制最匹配的区域  在图中把匹配区域框出
	rectangle(mask, matchLoc, cv::Point(matchLoc.x + templateImage.cols, matchLoc.y + templateImage.rows), cv::Scalar(0, 255, 0), 2, 8, 0);
	cv::imshow("mask", mask);
}

下载安装opencv-3.4.6

vs2017新建QT x64 GUI程序

项目配置如下

附加包含目录:

D:\soft\OpenCV\opencv\build\include\opencv2
D:\soft\OpenCV\opencv\build\include

附加库目录

D:\soft\OpenCV\opencv\build\x64\vc14\lib

附加依赖项

opencv_world346d.lib

发布了45 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ly1390811049/article/details/103914969