451xxx

自学python-opencv(1)模式识别

import  cv2
import numpy as np
def template_demo():
tpl=cv2.imread('./images/ting.png')
target=cv2.imread("./images/timg.bmp")
cv2.imshow("template image",tpl)
cv2.imshow("target image",target)
#平方差匹配法归一化
#相关系数匹配法归一化
#归一化相关匹配法
methods=[cv2.TM_SQDIFF_NORMED,
cv2.TM_CCORR_NORMED,
cv2.TM_CCOEFF_NORMED]
##获取模板图像的高宽
#.shape[0:2]索引0个 0,1两个数 高0 宽1 通道数2
th,tw=tpl.shape[:2]
for md in methods:
print(md)
## result是我们各种算法下匹配后的图像
result=cv2.matchTemplate(target,tpl,md)
# 寻找矩阵(一维数组当做向量)中的最大值和最小值的匹配结果及其位置
min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(result)
##绘制矩形边框,将匹配区域标注出来
#min_loc:矩形定点 max_loc:矩形最大的定点
#(min_loc[0]+twidth,min_loc[1]+theight):矩形的宽高
#(0,0,225):矩形的边框颜色;2:矩形边框宽度
if md ==cv2.TM_SQDIFF_NORMED:
#平方差匹配法归一化
#tl是矩阵的左上点坐标
tl=min_loc
##tl是左上角点
else:
tl=max_loc
#矩阵的右下角坐标
br=(tl[0]+tw,tl[1]+th)
      #画矩形框
cv2.rectangle(
target,tl,br,(0,0,255),2
)
    #np.str(md) 返回数组 匹配方法
cv2.imshow("macth"+np.str(md),target)
#cv2.imshow("macth" + np.str(md),result)
print("-----------hi python-------------")
template_demo()
cv2.waitKey()
cv2.destroyWindow('all')
-------------------------------------------------------------------------------------------------------
模式识别待测图像的相关性,从左至右、从上到下模板与重叠图像相关度。相关度有以下
CV_TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大。
CV_TM_SQDIFF_NORMED 相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。
CV_TM_CCORR 相关系数匹配法:1表示完美的匹配;-1表示最差的匹配。
CV_TM_CCORR_NORMED 归一化平方差匹配法
CV_TM_CCOEFF 归一化相关匹配法
CV_TM_CCOEFF_NORMED 归一化相关系数匹配法
--------------------------------------------------------------------------------------------
有相关的数学推导式https://blog.csdn.net/jacky_ponder/article/details/69396909
-------------------------------------------------------------------------------------------------------
cv2.matchTemplate()
#匹配模板函数
result = cv.matchTemplate(target,tpl,md)
opencv的目标匹配函数为matchTemplate,函数原型为:matchTemplate(image, templ, method[, result[, mask]]) -> result
image参数表示待搜索源图像,必须是8位整数或32位浮点。
templ参数表示模板图像,必须不大于源图像并具有相同的数据类型。
method参数表示计算匹配程度的方法。
result参数表示匹配结果图像,必须是单通道32位浮点。如果image的尺寸为W x H,templ的尺寸为w x h,则result的尺寸为(W-w+1)x(H-h+1)
----------------------------------------------------------------------------------------------------------------

cv2.minMaxLoc()
cv2.minMaxLoc(src, mask=None)
src是一个矩阵(函数功能:假设有一个矩阵a,现在需要求这个矩阵的最小值,最大值,并得到最大值,最小值的索引)

min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(result)
假定一个数组np.array([0,2,3,4],[99,4,6,7])通过cv2.minMaxLoc
显示min_val是0 min_loc定位是这里是索引(0,0)
max_val是99 max_loc定位(1,1)
---------------------------------------------------------------------------------------------------


posted on 2020-09-24 18:08  451xxx  阅读(157)  评论(0)    收藏  举报

导航

/* 看板娘 */