OpenCV半小时掌握基本操作之模板匹配
作者:我是小白呀 发布时间:2022-05-03 10:36:41
标签:OpenCV,模板匹配,python
【OpenCV】⚠️高手勿入! 半小时学会基本操作 ⚠️ 概述模板
概述
OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 21 课)
模板匹配
模板匹配 (Template Matching) 和卷积的原理很像. 模板在原图像上从原点开始滑动, 计算模板与图片被模板覆盖的地方的差别程度.
格式:
cv2.matchTemplate(image, templ, method, result=None, mask=None)
参数:
image: 输入图像
templ: 输入模板
method: 方法
TM_SQDIFF: 计算平方差, 计算出来的值越小, 越相关
TM_CCORR: 计算相关性, 计算出来的值越大, 越相关
TM_CCOEFF: 计算相关系数, 计算出来的值越大, 越相关
TM_SQDIFF_NORMED: 计算归一化平方不同, 计算出来的值越接近 0, 越相关
TM_CCORR_NORMED: 计算归一化相关性, 计算出来的值越接近 1, 越相关
TM_CCOEFF_NORMED: 计算归一化系数, 计算出来的值越接近 1, 越相关
案例一
例 1:
import cv2
# 读取图片
img = cv2.imread("girl.jpg", 0)
print(img.shape) # (1280, 1920)
# 读取模板
template = cv2.imread("face.jpg", 0)
h, w = template.shape
print(template.shape) # (510, 518)
# 模板匹配
result = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
案例二
例 2:
import cv2
from matplotlib import pyplot as plt
# 读取图片
img = cv2.imread("girl.jpg", 0)
# 读取模板
template = cv2.imread("face.jpg", 0)
h, w = template.shape
# 模式
methods = ['cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED', 'cv2.TM_CCORR',
'cv2.TM_CCORR_NORMED', 'cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED']
# 循环
for meth in methods:
img2 = img.copy()
# 匹配方法的真值
method = eval(meth)
print("method:", method)
res = cv2.matchTemplate(img, template, method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 如果是平方差匹配TM_SQDIFF或归一化平方差匹配TM_SQDIFF_NORMED,取最小值
if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
# 画矩形
cv2.rectangle(img2, top_left, bottom_right, 255, 2)
# 展示
f, ax = plt.subplots(1, 2, figsize=(16, 8))
ax[0].imshow(img2, cmap='gray')
ax[1].imshow(res, cmap='gray')
plt.suptitle(meth)
plt.show()
输出结果:
来源:https://blog.csdn.net/weixin_46274168/article/details/119096602
0
投稿
猜你喜欢
- 最近收到一个朋友委托的需求,要将MP3的音频格式转换成wav的音频格式。于是,使用python写了这个小工具便于批量进行转换操作。首先,下载
- 本文讨论python中将某个复杂对象转换为简单对象或数据类型的常用魔术放啊,这些在编程中是十分有用的。1、__str__方法。在讲解本方法前
- TensorFlow 2.0之后动态分配显存import tensorflow as tfconfig = tf.compat.v1.Con
- 该章节我们来学习一下在 Python 中去创建并使用多进程的方法,通过学习该章节,我们将可以通过创建多个进程来帮助我们提高脚本执行的效率。可
- 本文实例讲述了Python2与Python3的区别。分享给大家供大家参考,具体如下:python2与python3的区别1、性能2、编码格式
- 最近在pythonTip做题的时候,遇到了deque模块,以前对其不太了解,现在特此总结一下deque模块是python标准库collect
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- 本文实例讲述了python中迭代器(iterator)用法。分享给大家供大家参考。具体如下:#-----------------------
- 安 * oostpython调用C/C++的方法有很多,本文使用boost.python。考虑到后期有好多在boost上的开发工作,所以boo
- 1、注册一个新浪应用,得到appkey和secret,以及token,将这些信息写入配置文件sina_weibo_config.ini,内容
- 本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下#!/usr/bin/env python# -*- c
- 简介:外部连接和自联接inner join(等值连接) 只返回两个表中联结字段相等的行left join(左联接) 返回包括左表中的所有记录
- 本文实例为大家分享了python微信好友删除的具体代码,供大家参考,具体内容如下#weixin.py#coding:utf-8# !/usr
- 本文列举了所有关于PHP语言中使用socket相关服务的一些函数。注意使用如下函数之前,你需要确保你的socket已打开,如果你没有打开,请
- 在写一个多线程类的时候调用报错 RuntimeError: thread.__init__() not calledclass Notify
- 本文实例为大家分享了python定时关机的具体代码,供大家参考,具体内容如下# coding: utf-8import sysimport
- Python 是一个美丽的语言,可以激发用户对它的爱。所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我
- 最近心情非常差,而且还没有触底的样子,哎~~~总是会忍不住叹气~~~前些日子在Twitter上叨唠说“不在乎IE8什么时候推出,只在乎IE6
- 这篇文章主要介绍了python常用排序算法的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 1、安装所需工具pip install pipreqs2、进入到python项目主目录pipreqs ./3、完成上面命令会生成requir