Python 模板匹配 匹配多個 識別多個圖形


原文:https://www.cnblogs.com/gezhuangzhuang/p/10724769.html

原文:https://www.cnblogs.com/FHC1994/p/9123393.html

原文:https://blog.csdn.net/qq_41603898/article/details/82219291

 

 

 識別技巧:

  小圖的選擇,盡可能的選擇最核心的部分,要保證大圖里面每個元素有包含了小圖

  小圖特點:小、每個圖都能匹配到、取核心部分

 

 

匹配的幾種方式:

  1、TM_SQDIFF:平方差匹配;
    TM_SQDIFF_NORMED:標准平方差匹配。
    利用平方差來進行匹配,最好匹配為0.匹配越差,匹配值越大。

 

  2、TM_CCORR:相關性匹配;
    TM_CCORR_NORMED:標准相關性匹配。
    采用模板和圖像間的乘法操作,數越大表示匹配程度較高, 0表示最壞的匹配效果。

 

  3、TM_CCOEFF:相關性系數匹配;
    TM_CCOEFF_NORMED:標准相關性系數匹配。
    將模版對其均值的相對值與圖像對其均值的相關值進行匹配,
    1表示完美匹配,-1表示糟糕的匹配,0表示沒有任何相關性(隨機序列)。

 

總結:隨着從簡單的測量(平方差)到更復雜的測量(相關系數),我們可獲得越來越准確的匹配(同時也意味着越來越大的計算代價)。

 

 

 

 

 

說明:

  原圖(大圖):big.jpg

  模板(小圖):smart.jpg

import cv2
import numpy as np
from matplotlib import pyplot as plt


# 原文:https://www.cnblogs.com/gezhuangzhuang/p/10724769.html
# 原文:https://blog.csdn.net/qq_21840201/article/details/85084621

# 1. 讀入原圖和模板
img_rgb = cv2.imread('big.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('smart.jpg', 0)
h, w = template.shape[:2]

# 歸一化平方差匹配
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8


# 返回res中值大於0.8的所有坐標
# 返回坐標格式(col,row) 注意:是先col后row 一般是(row,col)!!!
loc = np.where(res >= threshold)

# loc:標簽/行號索引 常用作標簽索引
# iloc:行號索引
# loc[::-1]:取從后向前(相反)的元素
# *號表示可選參數
for pt in zip(*loc[::-1]):
    right_bottom = (pt[0] + w, pt[1] + h)
    print(pt)
    cv2.rectangle(img_rgb, pt, right_bottom, (0, 0, 255), 2)

# 保存處理后的圖片
cv2.imwrite('res.png', img_rgb)



# 顯示圖片 參數:(窗口標識字符串,imread讀入的圖像)
cv2.imshow("test_image", img_rgb)

# 窗口等待任意鍵盤按鍵輸入 0為一直等待 其他數字為毫秒數
cv2.waitKey(0)

# 銷毀窗口 退出程序
cv2.destroyAllWindows()

 

 

用到的圖片:

big.jpg

 

 

smart.jpg

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM