OpenCV:模板匹配_cv2

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

首先介绍模板匹配,然后边缘检测,最后结合ADB实现「跳一跳」自动化。

游戏虽然过时了,但是拿来练练手还是不错的。

编程就该是快乐的,哈哈。

/ 01 / 模板匹配

模板匹配,就是在整个图像区域里发现与给定子图像相匹配的小块区域。

这里需要一个模板图像(给定的子图像)和一个待检测的图像(原图像)。

在待检测图像上,从左向右,从上向下计算模板图像与重叠子图像的匹配度,匹配度越大,两者相同的可能性越大。

这里主要涉及OpenCV的cv2.matchTemplate()和cv2.minMaxLoc()函数。

第一个函数作用是在模板和输入图像之间寻找匹配,获得匹配结果图像。

第二个函数的作用则是在给定的矩阵中寻找最大和最小值(包括它们的位置)。

其中模板匹配算法有以下六种。

 

# 第一类,利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大

# 平方差匹配
method=CV_TM_SQDIFF

# 标准平方差匹配
method=CV_TM_SQDIFF_NORMED

# 第二类,采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果

# 相关匹配
method=CV_TM_CCORR

# 标准相关匹配
method=CV_TM_CCORR_NORMED

# 第三类,将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列)

# 相关系数匹配
method=CV_TM_CCOEFF

# 标准相关系数匹配
method=CV_TM_CCOEFF_NORMED

标准化意味着将数值统一到0~1。

除了平方差类型的是值越小越好,其他的都是值越大越好。

/ 02 / 图像检索

首先来看一下两张图像,都为灰度图。

 

import cv2

# 读取待检测图像
img = cv2.imread(‘game.png’, 0)
# 读取模板图像
temple = cv2.imread(‘temple.png’, 0)

# 显示灰度处理后的待检测图像
cv2.namedWindow(‘sample’, 0)
cv2.resizeWindow(‘sample’, 400, 600)
cv2.imshow(‘sample’, img)

# 显示灰度处理后的模板图像
cv2.namedWindow(‘target’, 0)
cv2.resizeWindow(‘target’, 400, 600)
cv2.imshow(‘target’, temple)

输出结果如下。

第一张为模板图像,第二张为待检测图像。

下面使用OpenCV的两个函数,来实现模板匹配。

 

# 获取模板图像的高和宽
th, tw = temple.shape[:2]
print(th, tw)

# 使用标准相关系数匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性
result = cv2.matchTemplate(img, temple, cv2.TM_CCOEFF_NORMED)

# result为匹配结果矩阵
# print(result)

# TM_CCOEFF_NORMED方法处理后的结果图像
cv2.namedWindow(‘match_r’, 0)
cv2.resizeWindow(‘match_r’, 400, 600)
# 显示窗口
cv2.imshow(‘match_r’, result)

# 使用函数minMaxLoc,确定匹配结果矩阵的最大值和最小值(val),以及它们的位置(loc)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

# 此处选取最大值的位置,为图像的左上角
tl = max_loc
# 获取图像的右下角
br = (tl[0]+tw, tl[1]+th)
# 绘制矩形框
cv2.rectangle(img, tl, br, (0, 0, 255), 2)

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java和OpenCV实现模板匹配的问题,我可以给你一些指导。 首先,你需要下载和安装OpenCV 3.2.0的Java库,并在Java项目中引用它们。然后,你可以使用Java代码调用OpenCV库的模板匹配函数。 下面是一个简单的例子: ``` import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfPoint; import org.opencv.core.MatOfPoint2f; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class TemplateMatching { static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } public static void main(String[] args) { // 读取源图像和模板图像 Mat source = Imgcodecs.imread("source.jpg"); Mat template = Imgcodecs.imread("template.jpg"); // 创建结果图像 Mat result = new Mat(source.rows() - template.rows() + 1, source.cols() - template.cols() + 1, CvType.CV_32FC1); // 进行模板匹配 Imgproc.matchTemplate(source, template, result, Imgproc.TM_CCOEFF_NORMED); // 找到匹配位置 Core.MinMaxLocResult mmr = Core.minMaxLoc(result); Point matchLoc = mmr.maxLoc; // 在源图像上绘制矩形框 Imgproc.rectangle(source, matchLoc, new Point(matchLoc.x + template.cols(), matchLoc.y + template.rows()), new Scalar(0, 255, 0), 2); // 显示结果 Imgcodecs.imwrite("result.jpg", source); } } ``` 在这个例子中,我们首先读取源图像和模板图像,然后创建一个结果矩阵,用于存储模板匹配的结果。然后,我们调用OpenCV的matchTemplate函数,将源图像和模板图像作为参数传入,并将结果存储在结果矩阵中。接着,我们使用Core.minMaxLocResult函数找到匹配位置,并在源图像上绘制矩形框。最后,我们将结果保存为一个新的图像文件。 希望这个例子可以帮助你开始使用Java和OpenCV进行模板匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值