美文网首页
iOS OpenCV 图像识别-模板匹配

iOS OpenCV 图像识别-模板匹配

作者: 二两白砂糖 | 来源:发表于2018-11-30 18:18 被阅读0次

一、前言

        OpenCV是一个采用C及C++语言编写的开源机器视觉库,使用范围很广,在此不做过多的介绍,详情可以看一下:OpenCV官网 。在此我们稍微探讨一下OpenCV的模板匹配功能。模板匹配,顾名思义,即给定的一张图片中识别并找出模板图所在的位置。如我需要在下图中定位出照片图标的位置,此时我们就需要用到OpenCV的TemplateMatch功能了。

ScreenShot

二、必要知识点

       在了解功能实现之前先了解一下必要的一些知识点:

cv::Mat 

        作用:数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵。Mat类由两部分数据组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。Mat在进行赋值和拷贝时,只复制矩阵头,而不复制矩阵,提高效率。如果矩阵属于多个Mat对象,则通过引用计数来判断,当最后一个使用它的对象,则负责释放矩阵。

cv::resize(cv::InputArray src, cv::OutputArray dst, cv::Size dsize)

        作用:该函数的作用是将Mat 类的src 等比缩放,然后存放到Mat类的dst中,缩放比例越小性能越高,但识别度越低。

matchTemplate(InputArray image, InputArray templ, OutputArray result, int method)

        作用:OpenCV 匹配函数

minMaxLoc(const cv::SparseMat &a, double *minVal, double *maxVal)

        作用:整理出本次匹配的最大最小值

cv::Rect

        作用:类似CGRect

UIImageToMat(const UIImage *image, cv::Mat &m)

        需要导入<opencv2/imgcodecs/ios.h>,作用:将UIImage转为矩阵

三、功能实现

        了解以上各函数的作用之后,就可以着手编写代码了。

1、创建模板矩阵(通俗易懂就是我要找的东西,比如下面的相册图标)

模板图片

代码(请原谅我编写该文档的时候没有使用MarkDown格式。。丑陋地贴一下截图。。):

模板设置

2、设置原始图(即屏幕截图)

代码:

设置原始图

3、模板比对

代码:

模板匹配

至此,匹配操作已经完成。

效果:

效果图

四、Demo

        Demo地址为:GitHub

        在构建此Demo前,由于Git 100M的限制,请先下载iOS的OpenCV的SDK,将opencv2.framework文件导入到工程的根目录,下载地址为:opencv2.framework

        如果该文章对您有帮助,Git上求个Star。谢谢各位~

相关文章

网友评论

      本文标题:iOS OpenCV 图像识别-模板匹配

      本文链接:https://www.haomeiwen.com/subject/ehshcqtx.html