机器视觉——OpenCV案例分析基础(八)(模式匹配与背景减除)

模式匹配与背景减除

一、理论分析

模式匹配简单来说就是我想在一副地图上找到一个我已知地名的位置,更通俗来叔也就是查地图。这其中也包括需要查找时具有一定的变通性,比如我想在一个图里找到狗狗的位置,那么无论这只狗狗的动作和表情与待查找的不一致,也需要精准的匹配。而对于简单的模式匹配来说很难实现,以为它仅仅会计算不同特征之间的相似度,很难变通。但是我们同样可以利用这一点来对图像通过模式识别来进行筛选与甄别。
那么背景减除(Background Subtraction)是许多基于计算机视觉的任务中的主要预处理步骤。就是我在做视频的目标识别时,主要是对动作的事物进行识别,而不考虑背影的因素,所以可以通过背景减除去掉背景在目标识别运算,从而提高识别效率。

二、代码分析

2.1 模式匹配

from cv2 import cv2 as cv

img = cv.imread("2021-12-02-Pictures/2021-12-02-Pictures/background.jpg")
templ = cv.imread("2021-12-02-Pictures/2021-12-02-Pictures/template.png")
# templ = cv.flip(templ,1) #图像的翻转
# templ = cv.rotate(templ,cv.ROTATE_180) #图像的旋转
# templ = cv.resize(templ,None,fx=1.2,fy=1.4) #图像大小的变换
width,height = templ.shape[:2]
results = cv.matchTemplate(img,templ,cv.TM_SQDIFF_NORMED) # 按照标准平方差方式匹配
# print(results)
minVal,maxVal,minloc,maxloc = cv.minMaxLoc(results)
resultsPoints1 = minloc # 将最小值坐标当做最佳匹配区域的左上角点坐标
resultsPoints2 = (resultsPoints1[0]+width,resultsPoints1[1]+height) # 计算出最佳匹配区域的右下角点坐标
cv.rectangle(img,resultsPoints1,resultsPoints2,(0,0,255),2) # 在最佳匹配区域位置绘制红色方框,线宽为2像素

cv.imshow('img',img)
cv.imshow('templ',templ)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:
机器视觉——OpenCV案例分析基础(八)(模式匹配与背景减除)
机器视觉——OpenCV案例分析基础(八)(模式匹配与背景减除)

2.2 背景减除

from cv2 import cv2 as cv
bgsubmog = cv.createBackgroundSubtractorMOG2() #创建背景减除方法 
mask = bgsubmog.apply(img) #去除背景后的图像

该方法主要应用在视频中的模式识别中,这里不好举例。会在后期的综合案列中对应讲解。

上一篇:qt下使用opencv读取视频


下一篇:OpenCV学习笔记(三):OpenCV图像处理1