OpenCV 模板匹配方法詳解

文章目錄

  • 1. 什么是模板匹配?
  • 2. 模板匹配的原理
    • 2.1數學表達
  • 3. OpenCV 實現模板匹配
    • 3.1基本步驟
  • 4. 模板匹配的局限性
  • 5. 總結

1. 什么是模板匹配?

模板匹配(Template Matching)是計算機視覺中的一種基礎技術,用于在目標圖像(大圖)中查找與模板圖像(小圖)最相似的部分。它廣泛應用于:

  • 目標檢測(如人臉、物體識別)
  • 圖像對齊(如醫學影像、衛星圖像)
  • 自動化測試(如 UI 元素定位)
  • 工業視覺(如零件定位)

2. 模板匹配的原理

模板匹配的核心思想是滑動窗口比對

  1. 將模板圖像在目標圖像上逐像素滑動。
  2. 在每個位置計算模板與目標圖像局部區域的相似度。
  3. 根據相似度評分,找到最佳匹配位置。

2.1數學表達

常用的相似度計算方法(匹配方法):

  • 平方差匹配(SQDIFF):差異越小,匹配越好
    在這里插入圖片描述

  • 歸一化平方差匹配(SQDIFF_NORMED):對平方差進行歸一化,更魯棒。

  • 相關性匹配(CCORR):值越大,匹配越好
    在這里插入圖片描述

  • 歸一化相關性匹配(CCORR_NORMED):歸一化版本,抗光照變化。

  • 相關系數匹配(CCOEFF):計算相關性系數,適合模板與圖像亮度不一致的情況。

  • 歸一化相關系數匹配(CCOEFF_NORMED)(最常用):歸一化版本,魯棒性最強。


3. OpenCV 實現模板匹配

OpenCV 提供了 cv2.matchTemplate() 函數實現模板匹配:

3.1基本步驟

  1. 讀取目標圖像和模板圖像

    import cv2
    import numpy as nptarget_img = cv2.imread('target.jpg', cv2.IMREAD_COLOR)  # 目標圖像
    template_img = cv2.imread('template.jpg', cv2.IMREAD_COLOR)  # 模板圖像
    
  2. 執行模板匹配

    res = cv2.matchTemplate(target_img, template_img, cv2.TM_CCOEFF_NORMED  # 匹配方法
    )
    
    • res 是一個匹配結果矩陣,每個像素表示該位置的匹配得分。
  3. 找到最佳匹配位置

    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    
    • max_loc 是最佳匹配的左上角坐標(如果使用 TM_CCOEFF_NORMED)。
    • 如果使用 TM_SQDIFF,則 min_loc 是最佳匹配位置。
  4. 繪制匹配區域

    h, w = template_img.shape[:2]  # 獲取模板尺寸
    top_left = max_loc  # 最佳匹配的左上角
    bottom_right = (top_left[0] + w, top_left[1] + h)  # 右下角# 在目標圖像上繪制矩形框
    matched_img = cv2.rectangle(target_img.copy(),  # 避免修改原圖top_left,bottom_right,(0, 255, 0),  # 綠色框2  # 線寬
    )cv2.imshow('Matched Result', matched_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

4. 模板匹配的局限性

  1. 對旋轉和縮放敏感

    • 如果模板在目標圖像中旋轉或縮放,匹配效果會變差。
    • 解決方法:結合多尺度匹配(cv2.resize)或特征匹配(SIFT/SURF/ORB)。
  2. 計算效率問題

    • 大圖像 + 大模板時計算較慢。
    • 優化方法:金字塔降采樣(cv2.pyrDown)或 GPU 加速。
  3. 光照變化影響

    • 如果目標圖像和模板光照不一致,匹配可能失敗。
    • 解決方法:使用歸一化匹配方法(如 TM_CCOEFF_NORMED)。

5. 總結

方法適用場景特點
TM_SQDIFF精確匹配越小越好,適合固定亮度場景
TM_CCOEFF_NORMED魯棒匹配越大越好,抗光照變化
TM_CCORR_NORMED快速匹配計算快,但對亮度敏感

模板匹配適合固定尺寸、無旋轉的場景,如果遇到復雜情況,可以結合:

  • 多尺度匹配(cv2.resize)
  • 特征匹配(SIFT、ORB)
  • 深度學習(YOLO、SSD)

📌 你用過模板匹配嗎?歡迎在評論區分享你的經驗! 🎉

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

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

相關文章

TextCNN 模型文本分類實戰:深度學習在自然語言處理中的應用

在自然語言處理(NLP)領域,文本分類是研究最多且應用最廣泛的任務之一。從情感分析到主題識別,文本分類技術在眾多場景中都發揮著重要作用。最近,我參與了一次基于 TextCNN 模型的文本分類實驗,從數據準備到…

Qt-創建模塊化.pri文件

文章目錄 一、.pri文件的作用與基本結構作用基本結構 二、創建.pri文件如何添加模塊代碼? 一、.pri文件的作用與基本結構 作用 在Qt開發中,.pri文件(Project Include File)是一種配置包含文件,用于模塊化管理和復用項…

SpringCloud組件——Eureka

一.背景 1.問題提出 我們在一個父項目下寫了兩個子項目,需要兩個子項目之間相互調用。我們可以發送HTTP請求來獲取我們想要的資源,具體實現的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 舉個例子&#x…

EAL4+與等保2.0:解讀中國網絡安全雙標準

EAL4與等保2.0:解讀中國網絡安全雙標準 在當今數字化時代,網絡安全已成為各個行業不可忽視的重要議題。特別是在金融、政府、醫療等領域,保護信息的安全性和隱私性顯得尤為關鍵。在中國,EAL4和等級保護2.0(簡稱“等保…

FFmpeg+Nginx+VLC打造M3U8直播

一、視頻直播的技術原理和架構方案 直播模型一般包括三個模塊:主播方、服務器端和播放端 主播放創造視頻,加美顏、水印、特效、采集后推送給直播服務器 播放端: 直播服務器端:收集主播端的視頻推流,將其放大后推送給…

【Redis】緩存三劍客問題實踐(上)

本篇對緩存三劍客問題進行介紹和解決方案說明,下篇將進行實踐,有需要的同學可以跳轉下篇查看實踐篇:(待發布) 緩存三劍客是什么? 緩存三劍客指的是在分布式系統下使用緩存技術最常見的三類典型問題。它們分…

Flink 2.0 編譯

文章目錄 Flink 2.0 編譯第一個問題 java 版本太低maven 版本太低maven 版本太高開始編譯擴展多版本jdk 配置 Flink 2.0 編譯 看到Flink2.0 出來了,想去玩玩,看看怎么樣,當然第一件事,就是編譯代碼,但是沒想到這么多問…

獲取印度股票市場列表、查詢IPO信息以及通過WebSocket實時接收數據

為了對接印度股票市場,獲取市場列表、查詢IPO信息、查看漲跌排行榜以及通過WebSocket實時接收數據等步驟。 1. 獲取市場列表 首先,您需要獲取支持的市場列表,這有助于了解哪些市場可以交易或監控。 請求方法:GETURL&#xff1a…

云原生--CNCF-1-云原生計算基金會介紹(云原生生態的發展目標和未來)

1、CNCF定義與背景 云原生計算基金會(Cloud Native Computing Foundation,CNCF)是由Linux基金會于2015年12月發起成立的非營利組織,旨在推動云原生技術的標準化、開源生態建設和行業協作。其核心目標是通過開源項目和社區協作&am…

【Rust 精進之路之第5篇-數據基石·下】復合類型:元組 (Tuple) 與數組 (Array) 的定長世界

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025-04-20 引言:從原子到分子——組合的力量 在上一篇【數據基石上】中,我們仔細研究了 Rust 的四種基本標量類型&#xff1…

MongoDB 集合名稱映射問題

項目場景 在使用 Spring Data MongoDB 進行開發時,定義了一個名為 CompetitionSignUpLog 的實體類,并創建了對應的 Repository 接口。需要明確該實體類在 MongoDB 中實際對應的集合名稱是 CompetitionSignUpLog 還是 competitionSignUpLog。 問題描述 …

物聯網 (IoT) 安全簡介

什么是物聯網安全? 物聯網安全是網絡安全的一個分支領域,專注于保護、監控和修復與物聯網(IoT)相關的威脅。物聯網是指由配備傳感器、軟件或其他技術的互聯設備組成的網絡,這些設備能夠通過互聯網收集、存儲和共享數據…

PCB原理圖解析(炸雞派為例)

晶振 這是外部晶振的原理圖。 32.768kHz 的晶振,常用于實時時鐘(RTC)電路,因為它的頻率恰好是一天的分數(32768 秒),便于實現秒計數。 C25 和 C24:兩個 12pF 的電容,用于…

Jupyter Notebook 中切換/使用 conda 虛擬環境的方式(解決jupyter notebook 環境默認在base下面的問題)

使用 nb_conda_kernels 添加所有環境 一鍵添加所有 conda 環境 conda activate my-conda-env # this is the environment for your project and code conda install ipykernel conda deactivateconda activate base # could be also some other environment conda in…

【JAVA】十三、基礎知識“接口”精細講解!(二)(新手友好版~)

哈嘍大家好呀qvq,這里是乎里陳,接口這一知識點博主分為三篇博客為大家進行講解,今天為大家講解第二篇java中實現多個接口,接口間的繼承,抽象類和接口的區別知識點,更適合新手寶寶們閱讀~更多內容持續更新中…

基于MuJoCo物理引擎的機器人學習仿真框架robosuite

Robosuite 基于 MuJoCo 物理引擎,能支持多種機器人模型,提供豐富多樣的任務場景,像基礎的抓取、推物,精細的開門、擰瓶蓋等操作。它可靈活配置多種傳感器,提供本體、視覺、力 / 觸覺等感知數據。因其對強化學習友好&am…

企業微信自建應用開發回調事件實現方案

目錄 1. 前言 2. 正文 2.1 技術方案 2.2 策略上下文 2.2 添加客戶策略實現類 2.3 修改客戶信息策略實現類 2.4 默認策略實現類 2.5 接收事件的實體類(可以根據事件格式的參數做修改) 2.6 實際接收回調結果的接口 近日在開發企業微信的自建應用時…

Linux將多個塊設備掛載到一個掛載點

在 Linux 系統中,直接將多個塊設備掛載到同一個掛載點是不可能的。這是因為 Linux 的文件系統掛載機制設計為一個掛載點一次只能關聯一個文件系統。如果嘗試將多個塊設備掛載到同一個掛載點,后一次掛載會覆蓋前一次的掛載,導致只有最后掛載的…

Spark-SQL(四)

本節課學習了spark連接hive數據,在 spark-shell 中,可以看到連接成功 將依賴放進pom.xml中 運行代碼 創建文件夾 spark-warehouse 為了使在 node01:50070 中查看到數據庫,需要添加如下代碼,就可以看到新創建的數據庫 spark-sql_1…

野外價值觀:在真實世界的語言模型互動中發現并分析價值觀

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…