Python-OpenCV中的圖像處理-模板匹配

Python-OpenCV中的圖像處理-模板匹配

  • 模板匹配
    • 單對象的模板匹配
    • 多對象的模板匹配

模板匹配

  • 使用模板匹配可以在一幅圖像中查找目標
  • 函數: cv2.matchTemplate(), cv2.minMaxLoc()
  • 模板匹配是用來在一副大圖中搜尋查找模版圖像位置的方法。 OpenCV 為我們提供了函數: cv2.matchTemplate()。和 2D 卷積一樣,它也是用模板圖像在輸入圖像(大圖)上滑動,并在每一個位置對模板圖像和與其對應的輸入圖像的子區域進行比較。 OpenCV 提供了幾種不同的比較方法(細節請看文檔)。返回的結果是一個灰度圖像,每一個像素值表示了此區域與模板的匹配程度。
  • 如果輸入圖像的大小是( WxH),模板的大小是( wxh),輸出的結果的大小就是( W-w+1, H-h+1)。當你得到這幅圖之后,就可以使用函數cv2.minMaxLoc() 來找到其中的最小值和最大值的位置了。第一個值為矩形左上角的點(位置),( w, h)為 moban 模板矩形的寬和高。這個矩形就是找到的模板區域了。

單對象的模板匹配

import numpy as np
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('./resource/opencv/image/messi5.jpg', cv2.IMREAD_GRAYSCALE)
img2 = img.copy()
template = cv2.imread('./resource/opencv/image/messi_face.jpg', cv2.IMREAD_GRAYSCALE)
w,h = template.shape[::-1]# All the 6 mathods form comparison in a list
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR', 'cv2.TM_CCORR_NORMED','cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']for meth in methods:img = img2.copy()# exec 語句用來執行儲存在字符串或文件中的 Python 語句。# 例如,我們可以在運行時生成一個包含 Python 代碼的字符串,然后使用 exec 語句執行這些語句。# eval 語句用來計算存儲在字符串中的有效 Python 表達式method = eval(meth)# Apply template matchingres = cv2.matchTemplate(img, template, method)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)# 使用不同的比較方法,對結果的解釋不同if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:top_left = min_locelse:top_left = max_locbottom_right = (top_left[0] + w, top_left[1] + h)cv2.rectangle(img, top_left, bottom_right, 255, 2)plt.subplot(121), plt.imshow(res, cmap='gray'), plt.title('Mathing 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()

程序原圖文件,在一張大圖中搜索梅西的面部。
在這里插入圖片描述

在這里插入圖片描述
程序運行結果:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
實測驗證 cv2.TM_CCORR 的效果不是太好。

多對象的模板匹配

在前面的部分,我們在圖片中搜素梅西的臉,而且梅西只在圖片中出現了一次。假如你的目標對象只在圖像中出現了很多次怎么辦呢?函數cv.minMaxLoc() 只會給出最大值和最小值。此時,我們就要使用閾值了。在下面的例子中我們要經典游戲 Mario 的一張截屏圖片中找到其中的硬幣。

import numpy as np
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('./resource/opencv/image/mario.jpg', cv2.IMREAD_COLOR)
img1 = img.copy()
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)template = cv2.imread('./resource/opencv/image/mario_coins.jpg', cv2.IMREAD_GRAYSCALE)
w, h = template.shape[::-1]res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
print(res.shape)
threshold = 0.8cv2.imshow('res', res)# numpy.where(condition[, x, y])
loc = np.where(res >= threshold)for pt in zip(*loc[::-1]):cv2.rectangle(img, pt, (pt[0]+w, pt[1]+h), (0, 0, 255), 1)cv2.imshow('image',img1)
cv2.imshow('res',res)
cv2.imshow('draw',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:閥值設定要合適,threshold = 0.8
在這里插入圖片描述

threshold = 0.95部分金幣沒有匹配到
在這里插入圖片描述
threshold = 0.5
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38482.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38482.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

無線充電底座

<項目>無線充電器 前言 個人DIY的無線充電底座&#xff08;帶磁吸&#xff09;&#xff0c;基于IP6829方案。 Drawn By:67373 硬件部分 3D模型 資料開源鏈接 https://github.com/linggan17/WirelessCharge

面試熱題(每日溫度)

請根據每日 氣溫 列表 temperatures &#xff0c;重新生成一個列表&#xff0c;要求其對應位置的輸出為&#xff1a;要想觀測到更高的氣溫&#xff0c;至少需要等待的天數。如果氣溫在這之后都不會升高&#xff0c;請在該位置用 0 來代替。 輸入: temperatures [73,74,75,71,69…

SpringBoot + Mybatis多數據源

一、配置文件 spring: # datasource: # username: root # password: 123456 # url: jdbc:mysql://127.0.0.1:3306/jun01?characterEncodingutf-8&serverTimezoneUTC # driver-class-name: com.mysql.cj.jdbc.Driverdatasource:# 數據源1onedata:jdbc-url: j…

SCF金融公鏈新加坡啟動會 鏈結創新驅動未來

新加坡迎來一場引人矚目的金融科技盛會&#xff0c;SCF金融公鏈啟動會于2023年8月13日盛大舉行。這一受矚目的活動將為金融科技領域注入新的活力&#xff0c;并為廣大投資者、合作伙伴以及關注區塊鏈發展的人士提供一個難得的交流平臺。 在SCF金融公鏈啟動會上&#xff0c; Wil…

CentOS7的journalctl日志查看方法

多臺服務器間免密登錄|免密拷貝 Cenos7 搭建Minio集群部署服務器(一) Cenos7 搭建Minio集群Nginx統一訪問入口|反向動態代理(二) Spring Boot 與Minio整合實現文件上傳與下載(三) CentOS7的journalctl日志查看方法 MySQL8.xx一主兩從復制安裝與配置 1、概述 日志管理工…

【ElasticSearch入門】

目錄 1.ElasticSearch的簡介 2.用數據庫實現搜素的功能 3.ES的核心概念 3.1 NRT(Near Realtime)近實時 3.2 cluster集群&#xff0c;ES是一個分布式的系統 3.3 Node節點&#xff0c;就是集群中的一臺服務器 3.4 index 索引&#xff08;索引庫&#xff09; 3.5 type類型 3.6 doc…

【佳佳怪文獻分享】MVFusion: 利用語義對齊的多視角 3D 物體檢測雷達和相機融合

標題&#xff1a;MVFusion: Multi-View 3D Object Detection with Semantic-aligned Radar and Camera Fusion 作者&#xff1a;Zizhang Wu , Guilian Chen , Yuanzhu Gan , Lei Wang , Jian Pu 來源&#xff1a;2023 IEEE International Conference on Robotics and Automat…

kubernetes企業級高可用部署

目錄 1、Kubernetes高可用項目介紹 2、項目架構設計 2.1、項目主機信息 2.2、項目架構圖 1、Kubernetes高可用項目介紹 2、項目架構設計 2.1、項目主機信息 2.2、項目架構圖 2.3、項目實施思路 3、項目實施過程 3.1、系統初始化 3.2、配置部署keepalived服務 3.3、…

強制Edge或Chrome使用獨立顯卡【WIN10】

現代瀏覽器通常將圖形密集型任務卸載到 GPU&#xff0c;以改善你的網頁瀏覽體驗&#xff0c;從而釋放 CPU 資源用于其他任務。 如果你的系統有多個 GPU&#xff0c;Windows 10 可以自動決定最適合 Microsoft Edge 自動使用的 GPU&#xff0c;但這并不一定意味著最強大的 GPU。 …

Linux/centos上如何配置管理NFS服務器?

Linux/centos上如何配置管理NFS服務器&#xff1f; 1 NFS基礎了解1.1 NFS概述1.2 NFS工作流程 2 安裝和啟動NFS服務2.1 安裝NFS服務器2.2 啟動NFS服務 3 配置NFS服務器和客戶端3.1 配置NFS服務器3.2 配置NFS客戶端 4 實際示例4.1 基本要求4.2 案例實現 1 NFS基礎了解 NFS&…

LAXCUS如何通過技術創新管理數千臺服務器

隨著互聯網技術的不斷發展&#xff0c;服務器已經成為企業和個人獲取信息、進行計算和存儲的重要工具。然而&#xff0c;隨著服務器數量的不斷增加&#xff0c;傳統的服務器管理和運維方式已經無法滿足現代企業的需求。LAXCUS做為專注服務器集群的【數存算管】一體化平臺&#…

Jtti:Windows server如何備份與還原注冊表

在 Windows Server 中&#xff0c;備份和還原注冊表是一項重要的任務&#xff0c;可以幫助你在系統配置更改之前創建一個恢復點&#xff0c;以防止出現問題。以下是在 Windows Server 上備份和還原注冊表的步驟&#xff1a; 備份注冊表&#xff1a; 1.打開“運行”對話框&…

企業數據庫遭到360后綴勒索病毒攻擊,360勒索病毒解密

在當今數字化時代&#xff0c;企業的數據安全變得尤為重要。隨著數字化辦公的推進&#xff0c;企業的生產運行效率得到了很大提升&#xff0c;然而針對網絡安全威脅&#xff0c;企業也開始慢慢引起重視。近期&#xff0c;我們收到很多企業的求助&#xff0c;企業的服務器遭到了…

代理模式(Java實現)

代理模式是常見的設計模式之一&#xff0c;顧名思義&#xff0c;代理模式就是代理對象具備真實對象的功能&#xff0c;并代替真實對象完成相應操作&#xff0c;并能夠在操作執行的前后&#xff0c;對操作進行增強處理。&#xff08;為真實對象提供代理&#xff0c;然后供其他對…

threejs使用gui改變相機的參數

調節相機遠近角度 定義相機的配置&#xff1a; const cameraConfg reactive({ fov: 45 }) gui中加入調節fov的方法 const gui new dat.GUI();const cameraFolder gui.addFolder("相機屬性設置");cameraFolder.add(cameraConfg, "fov", 0, 100).name(…

YOLO格式數據集(.txt)如何轉換為VOC格式數據集(.xml)

前言&#xff1a; 安裝好python環境與編譯器 轉換&#xff1a; 將標注文件從文本格式&#xff08;.txt&#xff09;轉換為 XML 格式&#xff08;.xml&#xff09;可以通過以下步驟完成&#xff1a; 解析文本標注文件&#xff1a;打開 .txt 文件&#xff0c;逐行讀取每個標注…

Gin模板語法

Gin模板語法 文章目錄 <center> Gin模板語法前提提醒Gin框架啟動服務器模板解析模板渲染遇到不同目錄下相同的文件如何加載和渲染自定義函數加載靜態文件 前提提醒 由于有了前面template包的基礎,所以該筆記不再過多詳細分析 Gin框架啟動服務器 語法: r:gin.Default()/…

Medical Isolated Power Supply System in Angola

安科瑞 華楠 Abstract: Diagnosis and treatment in modern hospitals are inseparable from advanced medical equipment, which are inseparable from safe and reliable power supply. Many operations often last for several hours, and the consequences of a sudden pow…

【UE4 RTS】07-Camera Boundaries

前言 本篇實現的效果是當CameraPawn移動到地圖邊緣時會被阻擋。 效果 步驟 1. 打開項目設置&#xff0c;在“引擎-碰撞”中&#xff0c;點擊“新建Object通道” 新建通道命名為“MapBoundaries”&#xff0c;然后點擊接受 2. 向視口中添加 阻擋體積 調整阻擋體積的縮放 向四…

【TypeScript】this指向,this內置組件

this類型 TypeScript可推導的this類型函數中this默認類型對象中的函數中的this明確this指向 怎么指定this類型 this相關的內置工具類型轉換ThisParameterType<>ThisParameterType<>ThisType TypeScript可推導的this類型 函數中this默認類型 對象中的函數中的this…