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

文章目录

  • 1.前言
  • 2.模板匹配
    • 2.1 准备图片
    • 2.2 导入需要的库
    • 2.3 读取模板图片
    • 2.4 读取检测图片
    • 2.5 获取模板的大小
    • 2.6 进行匹配

1.前言

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

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

2.模板匹配

2.1 准备图片

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

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

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模板匹配(人脸)_第3张图片

2.4 读取检测图片

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

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

python----初识opencv模板匹配(人脸)_第4张图片

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张图片

你可能感兴趣的:(python----初识opencv模板匹配(人脸))