模板匹配matlab OCR,OpenCV 模板匹配函数matchTemplate详解

1 #include "opencv2/highgui/highgui.hpp"

2 #include "opencv2/imgproc/imgproc.hpp"

3 #include

4 using namespacecv;5

6

7 //-----------------------------------【宏定义部分】--------------------------------------------8 //描述:定义一些辅助宏9 //------------------------------------------------------------------------------------------------

10 #define WINDOW_NAME1 "【原始图片】" //为窗口标题定义的宏

11 #define WINDOW_NAME2 "【匹配窗口】" //为窗口标题定义的宏

12

13 //-----------------------------------【全局变量声明部分】------------------------------------14 //描述:全局变量的声明15 //-----------------------------------------------------------------------------------------------

16 Mat g_srcImage;17 Mat g_templateImage;18 Mat g_resultImage;19 intg_nMatchMethod;20 int g_nMaxTrackbarNum = 5;21

22 //-----------------------------------【全局函数声明部分】--------------------------------------23 //描述:全局函数的声明24 //-----------------------------------------------------------------------------------------------

25 void on_Matching(int, void*);26 static voidShowHelpText();27

28

29 //-----------------------------------【main( )函数】--------------------------------------------30 //描述:控制台应用程序的入口函数,我们的程序从这里开始执行31 //-----------------------------------------------------------------------------------------------

32 intmain()33 {34

35

36

37 //【1】载入原图像和模板块

38 g_srcImage = imread("1.jpg", 1);39 g_templateImage = imread("2.jpg", 1);40

41 //【2】创建窗口

42 namedWindow(WINDOW_NAME1, CV_WINDOW_AUTOSIZE);43 namedWindow(WINDOW_NAME2, CV_WINDOW_AUTOSIZE);44

45 //【3】创建滑动条并进行一次初始化

46 createTrackbar("方法", WINDOW_NAME1, &g_nMatchMethod, g_nMaxTrackbarNum, on_Matching);47 on_Matching(0, 0);48

49 waitKey(0);50 return 0;51

52 }53

54 //-----------------------------------【on_Matching( )函数】--------------------------------55 //描述:回调函数56 //-------------------------------------------------------------------------------------------

57 void on_Matching(int, void*)58 {59 //【1】给局部变量初始化

60 Mat srcImage;61 g_srcImage.copyTo(srcImage);62

63 //【2】初始化用于结果输出的矩阵

64 int resultImage_cols = g_srcImage.cols - g_templateImage.cols+1;65 int resultImage_rows = g_srcImage.rows - g_templateImage.rows +1;66 g_resultImage.create(resultImage_cols, resultImage_rows, CV_8UC3);67

68 //【3】进行匹配和标准化→g_srcImage待匹配的源图像,g_templateImage模板图像69 //g_resultImage保存结果的矩阵,我们可以通过minMaxLoc() 确定结果矩阵的最大值和最小值的位置.70 //g_nMatchMethod模板匹配的算法

71 matchTemplate(g_srcImage, g_templateImage, g_resultImage, g_nMatchMethod);72 //normalize查找全局最小和最大稀疏数组元素并返回其值及其位置

73 normalize(g_resultImage, g_resultImage, 0, 1, NORM_MINMAX, -1);74

75 //【4】通过函数 minMaxLoc 定位最匹配的位置

76 doubleminValue;77 doublemaxValue;78 Point minLocation;79 Point maxLocation;80 Point matchLocation;81 minMaxLoc(g_resultImage, &minValue, &maxValue, &minLocation, &maxLocation, Mat());82

83 //【5】对于方法 SQDIFF 和 SQDIFF_NORMED, 越小的数值有着更高的匹配结果. 而其余的方法, 数值越大匹配效果越好

84 if (g_nMatchMethod == CV_TM_SQDIFF || g_nMatchMethod ==CV_TM_SQDIFF_NORMED)85 {86 matchLocation =minLocation;87 }88 else

89 {90 matchLocation =maxLocation;91 }92

93 //【6】绘制出矩形,并显示最终结果

94 rectangle(srcImage, matchLocation, Point(matchLocation.x + g_templateImage.cols, matchLocation.y + g_templateImage.rows), Scalar(0, 0, 255), 2, 8, 0);95 rectangle(g_resultImage, matchLocation, Point(matchLocation.x + g_templateImage.cols, matchLocation.y + g_templateImage.rows), Scalar(0, 0, 255), 2, 8, 0);96

97 imshow(WINDOW_NAME1, srcImage);98 imshow(WINDOW_NAME2, g_resultImage);99

100 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值