石嘴山网站seo资阳网络营销顾问招聘
石嘴山网站seo,资阳网络营销顾问招聘,wordpress typo3,搜索量排行目录
1、模板匹配介绍
2、cv::matchTemplate
3、模板匹配的方法#xff08;算法#xff09;
4、代码演示 1、模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 它可以在一幅图像中寻找与给定模板最相似的部分。 模板匹配的步骤#xff1a;
算法
4、代码演示 1、模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 它可以在一幅图像中寻找与给定模板最相似的部分。 模板匹配的步骤
1首先需要一个模板图像T给定的子图像
2另外需要一个待检测的图像-源图像S
3工作方法在带检测图像上从左到右从上向下计算模板图像与重叠子图像的匹配度匹配程度越大两者相同的可能性越大。
需要注意的是matchTemplate函数可以用于在图像中进行目标检测、模式识别等应用但需要注意模板的大小和比例与输入图像的匹配程度以及选择合适的匹配方法来获取准确的匹配结果
2、cv::matchTemplate void cv::matchTemplate( InputArray image,// 源图像必须是8-bit或者32-bit浮点数图像 InputArray templ,// 模板图像类型与输入图像一致 OutputArray result,// 输出结果必须是单通道32位浮点数假设源图像WxH,模板图像wxh, 则结果必须为W-w1, H-h1的大小。 int method,//使用的匹配方法 InputArray masknoArray() //(optional) 可选的掩码图像用于指定要处理的区域。 ) 3、模板匹配的方法算法 enum TemplateMatchModes { TM_SQDIFF 0, // 计算平方不同 TM_SQDIFF_NORMED 1, // 计算归一化平方不同 TM_CCORR 2, // 计算相关性 TM_CCORR_NORMED 3, // 计算归一化相关性 TM_CCOEFF 4, // 计算相关系数 TM_CCOEFF_NORMED 5 // 计算归一化相关系数 }; 相关的公式表示 4、代码演示
#includeopencv2\opencv.hpp
#includeiostream
#include math.husing namespace cv;
using namespace std;// 模板匹配
Mat src, temp, dst;
int match_method TM_SQDIFF;
int max_track 5;
const char* INPUT_T input image;
const char* OUTPUT_T result image;
const char* match_t template match-demo;
void Match_Demo(int, void*);
int main(int argc, char** argv)
{// 待检测图像src imread(cat.png);// 模板图像temp imread(ear.png);if (src.empty() || temp.empty()) {printf(could not load image...\n);return -1;}namedWindow(INPUT_T, CV_WINDOW_AUTOSIZE);namedWindow(OUTPUT_T, CV_WINDOW_NORMAL);namedWindow(match_t, CV_WINDOW_AUTOSIZE);imshow(INPUT_T, temp);const char* trackbar_title Match Algo Type:;createTrackbar(trackbar_title, OUTPUT_T, match_method, max_track, Match_Demo);Match_Demo(0, 0);waitKey(0);return 0;
}void Match_Demo(int, void*)
{int width src.cols - temp.cols 1;int height src.rows - temp.rows 1;Mat result(width, height, CV_32FC1);//32位浮点数单通道matchTemplate(src, temp, result, match_method, Mat());normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());Point minLoc;Point maxLoc;double min, max;src.copyTo(dst);Point temLoc;// 用于在给定矩阵中找到最小值、最大值及其对应的位置。minMaxLoc(result, min, max, minLoc, maxLoc, Mat());if (match_method TM_SQDIFF || match_method TM_SQDIFF_NORMED) temLoc minLoc;elsetemLoc maxLoc;// 绘制矩形rectangle(dst, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, 8);rectangle(result, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, 8);imshow(OUTPUT_T, result);imshow(match_t, dst);
}// 简易版例子
#if 0
int main()
{// 读取输入图像和模板图像cv::Mat image cv::imread(cat.png, cv::IMREAD_COLOR);cv::Mat templ cv::imread(ear.png, cv::IMREAD_COLOR);// 创建结果矩阵cv::Mat result;// 进行模板匹配cv::matchTemplate(image, templ, result, cv::TM_CCOEFF_NORMED);// 寻找最大匹配值和对应位置double minVal, maxVal;cv::Point minLoc, maxLoc;cv::minMaxLoc(result, minVal, maxVal, minLoc, maxLoc);// 绘制矩形框标记匹配位置cv::rectangle(image, maxLoc, cv::Point(maxLoc.x templ.cols, maxLoc.y templ.rows), cv::Scalar(0, 255, 0), 2);// 显示结果图像cv::imshow(Result, image);cv::waitKey(0);return 0;
}
#endif
效果展示 注意当选择2的时候有可能找不到原因在于我们选择的模板有关有可能存在失真的效果。所以对于模板如何选择也很关键。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86911.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!