OpenCV-Python 模板匹配|三十一

2020-12-06 人工智慧遇見磐創

目標

在本章中,您將學習

使用模板匹配在圖像中查找對象你將看到以下功能:cv.matchTemplate(),cv.minMaxLoc()理論

模板匹配是一種用於在較大圖像中搜索和查找模板圖像位置的方法。為此,OpenCV帶有一個函數cv.matchTemplate()。它只是將模板圖像滑動到輸入圖像上(就像在2D卷積中一樣),然後在模板圖像下比較模板和輸入圖像的拼圖。OpenCV中實現了幾種比較方法。(您可以檢查文檔以了解更多詳細信息)。它返回一個灰度圖像,其中每個像素表示該像素的鄰域與模板匹配的程度。

如果輸入圖像的大小為(WxH),而模板圖像的大小為(wxh),則輸出圖像的大小將為(W-w + 1,H-h + 1)。得到結果後,可以使用cv.minMaxLoc()函數查找最大/最小值在哪。將其作為矩形的左上角,並以(w,h)作為矩形的寬度和高度。該矩形是您模板的區域。

注意如果使用cv.TM_SQDIFF作為比較方法,則最小值提供最佳匹配。

OpenCV中的模板匹配

作為示例,我們將在梅西的照片中搜索他的臉。所以我創建了一個模板,如下所示:

我們將嘗試所有比較方法,以便我們可以看到它們的結果如何:

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltimg = cv.imread('messi5.jpg',0)img2 = img.copy()template = cv.imread('template.jpg',0)w, h = template.shape[::-1]# 列表中所有的6種比較方法methods = ['cv.TM_CCOEFF', 'cv.TM_CCOEFF_NORMED', 'cv.TM_CCORR', 'cv.TM_CCORR_NORMED', 'cv.TM_SQDIFF', 'cv.TM_SQDIFF_NORMED']for meth in methods: img = img2.copy() method = eval(meth) # 應用模板匹配 res = cv.matchTemplate(img,template,method) min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res) # 如果方法是TM_SQDIFF或TM_SQDIFF_NORMED,則取最小值 if method in [cv.TM_SQDIFF, cv.TM_SQDIFF_NORMED]: top_left = min_loc else: top_left = max_loc bottom_right = (top_left[0] + w, top_left[1] + h) cv.rectangle(img,top_left, bottom_right, 255, 2) plt.subplot(121),plt.imshow(res,cmap = 'gray') plt.title('Matching Result'), plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(img,cmap = 'gray') plt.title('Detected Point'), plt.xticks([]), plt.yticks([]) plt.suptitle(meth) plt.show()查看以下結果:

cv.TM_CCOEFF

cv.TMCCOEFFNORMEDcv.TM_CCORRcv.TMCCORRNORMEDcv.TM_SQDIFFcv.TMSQDIFFNORMED您會看到,使用cv.TM_CCORR的結果並不理想。

多對象的模板匹配

在上一節中,我們在圖像中搜索了梅西的臉,該臉在圖像中僅出現一次。假設您正在搜索具有多次出現的對象,則cv.minMaxLoc()不會為您提供所有位置。在這種情況下,我們將使用閾值化。因此,在此示例中,我們將使用著名遊戲Mario的屏幕截圖,並在其中找到硬幣。

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltimg_rgb = cv.imread('mario.png')img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)template = cv.imread('mario_coin.png',0)w, h = template.shape[::-1]res = cv.matchTemplate(img_gray,template,cv.TM_CCOEFF_NORMED)threshold = 0.8loc = np.where( res >= threshold)for pt in zip(*loc[::-1]): cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)cv.imwrite('res.png',img_rgb)結果:

相關焦點

  • 如何快速簡單的安裝opencv-python
    這樣就會從清華鏡像安裝opencv-contrib-python庫。目前opencv最新版本為4.1.1 ----2019-8-28在opencv-contrib-python 版本中含有額外模塊( Extra modules ),而 opencv-python 版本中只含有基礎模塊。
  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • opencv-python圖像預處理-濾波
    空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。頻率域是指從函數的頻率角度出發分析函數,對圖像進行傅立葉變換可以將圖像由圖像空間轉換到頻域空間,然後在頻率域中對圖像的頻譜作分析處理,以改變圖像的頻率特徵。
  • 使用模板匹配在Python上進行對象檢測!(附代碼)
    將從定義模板圖像(對象)開始,然後系統將在源圖像中找到與我們選擇的模板匹配的所有其他對象。因此,讓我解釋一下向您展示示例的含義。在下面有兩張圖片,左側是飛機的原圖像,右側是飛機作為對象的模板照片。要寫的是python代碼,以顯示此模板圖像實際適合我的源圖像的所有區域。
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • opencv-python獲取圖像:面向對象與面向過程
    這裡需要注意以下,opencv讀取圖片默認通道為BGR的格式,當在其他UI用戶界面顯示圖像時注意轉換一下通道順序,例如BGR轉換成RGB:Image1=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)下面讀取一張圖片並顯示
  • 「python opencv視覺零到實戰」八、圖片選區操作
    一、學習目標了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 使用OpenCV和Python構建自己的車輛檢測模型
    utm_source=blog&utm_medium=vehicle-detection-opencv-python)利用深度學習的計算機視覺(https://courses.analyticsvidhya.com/courses/computer-vision-using-deep-learning-version2?
  • 資料| Practical Python and OpenCV 一周時間帶你入門CV
  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    一、python中opencv打開圖像方法:import cv2filename='dog.jpg'img=cv2.imread(filename)cv2.imshow('Main Window',img)cv2.waitKey() #任意鍵退出cv2.destroyAllWindows()二、python中用opencv打開視頻頭的方法:
  • OpenCV中的快速直線檢測
    本文範例運行環境FastLineDetectors運行必要條件FastLineDetectors屬於opencv-contrib中的模塊,需要安裝opencv-contrib-python。在python的opencv相關的安裝包中,opencv-python 包含主要模塊,opencv-contrib-python 包含主要模塊以及一些擴展模塊。但這兩個模塊並不兼容,如果已經安裝過opencv-python,需要先卸載,再安裝opencv-contrib-python。
  • 基於python+OpenCV模塊的人臉識別定位技術
    本文將基於OpenCV模塊,在windows作業系統上,利用python語言,進行人臉識別技術的研究。當然OpenCV的應用領域很廣,除了人臉識別之外,它還支持圖像分割、動作識別、視頻處理等技術。代碼第1行導入opencv模塊。代碼的第3行(以上圖為準,空行也算一行),導入別人已經訓練好的臉部識別資料庫。這裡用到的數據是在github上開源的已經訓練好的分類器,如圖所示:需要將對應的數據文件(.xml文件)下載到指定目錄(代碼中的示例,展示的是與.py文件同一目錄下)。
  • Python第三方庫安裝
    pypi.org其中PyPI: Python Package Index是由PSF維護的展示全球Python計算生態的主站如要安裝圖像處理opencv-python庫可以搜索 opencv,但結果如下:
  • OpenCV-Python 特徵匹配|四十四
    如果為true,則Matcher僅返回具有值(i,j)的那些匹配項,以使集合A中的第i個描述符具有集合B中的第j個描述符為最佳匹配,反之亦然。即兩組中的兩個特徵應彼此匹配。它提供了一致的結果,並且是D.Lowe在SIFT論文中提出的比率測試的良好替代方案。創建之後,兩個重要的方法是BFMatcher.match()和BFMatcher.knnMatch()。
  • 基於opencv 的圖像處理入門教程
    檢測和修正歪曲的文字顏色檢測去噪檢測圖片的輪廓移除圖片的背景原文地址:https://likegeeks.com/python-image-processing/代碼和樣例圖片的地址:https://github.com/ccc013/CodesNotes/tree/master/opencv_noteshttps://github.com/ccc013/CodesNotes/blob/master/opencv_notes/opencv_image_process_tutorial.ipynb
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    /python3.5/dist-packages/tensorflow/modelsRUN apt-get install -y protobuf-compiler python-pil python-lxml python-tk#Set TF object detection availableENV PYTHONPATH "$PYTHONPATH:/usr
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    php-opencv:https://github.com/hihozhou/php-opencv這是圖像加載的方法:$image = cvimread(「images/faces.jpg」);相比之下,在 python 下圖像加載是這樣的: