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


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

 

 

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



# 讀取圖片 big.jpg
img = cv2.imread('big.jpg', 0)

# 讀取圖片 smart.jpg
template = cv2.imread('smart.jpg', 0)

# rows->h, cols->w
# h:表示矩陣的行數 
# w:表示矩陣的列數
# 這里是得到模板的矩陣大小
h, w = template.shape[:2]    



# 相關系數匹配方法: cv2.TM_CCOEFF
# 1表示完美匹配, -1表示糟糕的匹配, 0表示沒有任何相關性(隨機序列)
# res為一個數組(矩陣)
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF)

# cv2.minMaxLoc:在數組中找到全局最小值和最大值
# 返回的是 最值的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

print(min_val)
print(max_val)
print(min_loc)
print(max_loc)

# 左上角 取的最大值那個的位置
left_top = max_loc

# 右下角 矩陣知道了左上角一個點后 加上長寬 就知道整個矩形了
right_bottom = (left_top[0] + w, left_top[1] + h)


# cv2.rectangle:畫出矩形位置
# 第一個參數:img是原圖
# 第二個參數:(x,y)是矩陣的左上點坐標
# 第三個參數:(x+w,y+h)是矩陣的右下點坐標
# 第四個參數:(0,255,0)是畫線對應的rgb顏色
# 第五個參數:2是所畫的線的寬度
cv2.rectangle(img, left_top, right_bottom, 255, 2)


# plt.subplot:用於繪圖 可用於圖像對比
# subplot(numRows, numCols, plotNum)
# numRows:行
# numCols:列
# plotNum:指定的區域
# 使用方式:
#   如果 numRows = 2, numCols = 3, 那整個繪制圖表樣式為 2X3 的圖片區域, 用坐標表示為
#   (1, 1), (1, 2), (1, 3)
#   (2, 1), (2, 2), (2, 3)
#   當 plotNum = 3 時, 表示的坐標為(1, 3), 即第一行第三列的子圖
# 原文:https://www.cnblogs.com/xiaoboge/p/9683056.html
# plt.subplot(1,2,1):1行2列第1個區域 坐標(1,1)
plt.subplot(1,2,1)

# plt.imshow:圖像繪畫
# matplotlib.pyplot.imshow(X, cmap=None)
# X:要繪制的圖像或數組
# cmap:顏色圖譜 常用 plt.cm.gray plt.cm.jet
plt.imshow(res, cmap='gray')
plt.title('pic 1')
plt.xticks([])# x軸
plt.yticks([])# y軸

# plt.subplot(1,2,2):1行2列第2個區域 坐標(1,2)
plt.subplot(1,2,2), plt.imshow(img, cmap='gray')
plt.title('pic 2'), plt.xticks([]), plt.yticks([])
plt.show()

 

 

 

測試環境:

  win7 64,python 3.7.3

 

安裝的那些包,以前就裝了 前面文章應該有安裝

 

用到的測試圖片:

 

big.jpg

 

 

smart.jpg 


免責聲明!

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



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