python—-初识opencv模板匹配(人脸)

时间:2020-7-29 作者:admin


文章目录

1.前言

首先要声明的一点是,这里讲述的是模板匹配,并不是人脸检测(虽然我是去匹配的人脸,但是这两者还是有所区别)

环境: notebook, python3.6, anacanda3.5.2, opencv-python 3.4.1.15

2.模板匹配

2.1 准备图片

我们需要两张图片,一张是模板图,一张是被匹配的图

首先是模板图
python----初识opencv模板匹配(人脸)
然后是被检测的图片
python----初识opencv模板匹配(人脸)

2.2 导入需要的库

#opencv读取的格式是BGR
import cv2
import numpy as np
#Matplotlib是RGB
import matplotlib.pyplot as plt
%matplotlib inline 

#定义显示图片的函数,避免重复代码
def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey()
    cv2.destroyAllWindows()

这里就不多说了,有疑问的朋友可以移步这一篇博客
opencv新手入门

2.3 读取模板图片

#读取模板图片
template = cv2.imread("template.jpg")
#图片太大,我们使用高斯金字塔的向下采样法缩小一点
template = cv2.pyrDown(template)
#处理为灰度图
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# ret, template = cv2.threshold(template, 127, 255, cv2.THRESH_BINARY)
cv_show("template",template)

python----初识opencv模板匹配(人脸)

2.4 读取检测图片

#读取要检测的图片
img = cv2.imread("01.jpg")

img = cv2.pyrDown(img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv_show("img", img)

python----初识opencv模板匹配(人脸)

2.5 获取模板的大小

#获取到我们模板的大小h,w
h, w = template.shape[:2]

2.6 进行匹配

#开始模板匹配过程(采用计算归一化平方不同,计算值越接近0,越相关)
res = cv2.matchTemplate(img, template, cv2.TM_SQDIFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = min_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
#画出检测到的部分
imgcpy = img.copy()
cv2.rectangle(imgcpy, top_left, bottom_right, 255, 2)

plt.subplot(121), plt.imshow(res, cmap='gray')
plt.subplot(122), plt.imshow(imgcpy, cmap='gray')
plt.show()

最后得到的结果
python----初识opencv模板匹配(人脸)

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。