【模板匹配】圖像處理(OpenCV)-part10

19.1模板匹配

模板匹配就是用模板圖(通常是一個小圖)在目標圖像(通常是一個比模板圖大的圖片)中不斷的滑動比較,通過某種比較方法來判斷是否匹配成功,找到模板圖所在的位置。

不會有邊緣填充

類似卷積滑動比較挨個比較象素

返回結果大小是:目標圖大小-模板圖大小+1。

19.2 匹配方法

res=cv2.matchTemplate(image, templ, method)

image:原圖像,這是一個灰度圖像或彩色圖像(在這種情況下,匹配將在每個通道上獨立進行)。

templ:模板圖像,也是灰度圖像或與原圖像相同通道數的彩色圖像。

method:匹配方法,可以是以下之一:

????????cv2.TM_CCOEFF

????????cv2.TM_CCOEFF_NORMED

????????cv2.TM_CCORR

????????cv2.TM_CCORR_NORMED

????????cv2.TM_SQDIFF

????????cv2.TM_SQDIFF_NORMED

這些方法決定了如何度量模板圖像與原圖像子窗口之間的相似度。

返回值res

函數在完成圖像模板匹配后返回一個結果矩陣,這個矩陣的大小與原圖像相同。矩陣的每個元素表示原圖像中相應位置與模板圖像匹配的相似度。

匹配方法不同,返回矩陣的值的含義也會有所區別。以下是幾種常用的匹配方法及其返回值含義:

  1. cv2.TM_SQDIFFcv2.TM_SQDIFF_NORMED

    返回值越接近0,表示匹配程度越。最小值對應的最佳匹配位置。

  2. cv2.TM_CCORRcv2.TM_CCORR_NORMED

    返回值越大,表示匹配程度越好。最大值對應的最佳匹配位置。

  3. cv2.TM_CCOEFFcv2.TM_CCOEFF_NORMED

    返回值越大,表示匹配程度越好。最大值對應的最佳匹配位置。

19.2.1 平方差匹配

cv2.TM_SQDIFF

以模板圖與目標圖所對應的像素值使用平方差公式來計算,其結果越小,代表匹配程度越高,計算過程舉例如下。

注意:模板匹配過程皆不需要邊緣填充,直接從目標圖像的左上角開始計算。

19.2.2 歸一化平方差匹配

cv2.TM_SQDIFF_NORMED

與平方差匹配類似,只不過需要將值統一到0到1,計算結果越小,代表匹配程度越高,計算過程舉例如下。

19.2.3 相關匹配

cv2.TM_CCORR

使用對應像素的乘積進行匹配,乘積的結果越大其匹配程度越高,計算過程舉例如下。

19.2.4 歸一化相關匹配

cv2.TM_CCORR_NORMED

與相關匹配類似,只不過是將其值統一到0到1之間,值越大,代表匹配程度越高,計算過程舉例如下。

19.2.5 相關系數匹配

cv2.TM_CCOEFF

需要先計算模板與目標圖像的均值,然后通過每個像素與均值之間的差的乘積再求和來表示其匹配程度,1表示完美的匹配,-1表示最差的匹配,計算過程舉例如下。

19.2.6 歸一化相關系數匹配

cv2.TM_CCOEFF_NORMED

也是將相關系數匹配的結果統一到0到1之間,值越接近1代表匹配程度越高,計算過程舉例如下。

19.3 繪制輪廓

找的目標圖像中匹配程度最高的點,我們可以設定一個匹配閾值來篩選出多個匹配程度高的區域。

  • loc=np.where(array > 0.8) #loc包含array中所有大于0.8的元素索引的數組

np.where(condition) 是 NumPy 的一個函數,當條件為真時,返回滿足條件的元素的索引。

  • zip(*loc)

    • *loc 是解包操作,將 loc 中的多個數組拆開,作為單獨的參數傳遞給 zip

    • zip 將這些數組按元素一一配對,生成一個迭代器,每個元素是一個元組,表示一個坐標點。

x=list([[1,2,3,4,3],[23,4,2,4,2]])
print(list(zip(*x)))#[(1, 23), (2, 4), (3, 2), (4, 4), (3, 2)]
import cv2 as cv
import numpy as np#讀圖
img = cv.imread('images/huoyingrenzhe.jpg')
temp = cv.imread('images/zhipai.jpg')
#轉灰度
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
temp_gray = cv.cvtColor(temp, cv.COLOR_BGR2GRAY)
#模板匹配,拿到匹配結果,返回匹配程度矩陣
res = cv.matchTemplate(img_gray, temp_gray, cv.TM_CCOEFF_NORMED)
#設置閾值,使用np.where()獲取符合條件的坐標
threshold = 0.8
#得到[[y1,y2,y3...],[x1,x2,x3...]]
loc = np.where(res >= threshold)
h,w = temp.shape[:2]
#解包
for pt in zip(*loc[::-1]):cv.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
cv.imshow('img', img)
cv.waitKey(0)
cv.destroyAllWindows()

注意得到[[y1,y2,y3...],[x1,x2,x3...]]這樣的返回值,因為先返回行索引再返回列索引

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

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

相關文章

HTML:表格數據展示區

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>人員信息表</title><link rel"styl…

MySQL 的鎖,表級鎖是哪一層的鎖?行鎖是哪一層的鎖?

MySQL 的鎖層級與類型 在 MySQL 中&#xff0c;鎖的層級和實現與存儲引擎密切相關。 1. 表級鎖&#xff08;Table-Level Locks&#xff09; &#xff08;1&#xff09;存儲引擎層的表級鎖 實現層級&#xff1a;存儲引擎層&#xff08;如 MyISAM、InnoDB&#xff09;。特點&a…

阿里巴巴按圖搜索1688商品(拍立淘) API 返回值說明

阿里巴巴按圖搜索1688商品&#xff08;拍立淘&#xff09;API 返回值說明 阿里巴巴按圖搜索1688商品&#xff08;拍立淘&#xff09;API 的返回值通常以 JSON 格式返回&#xff0c;包含搜索結果、商品信息、分頁信息等。以下是具體的返回值說明&#xff1a; 1. 請求狀態信息 …

基于esp32-s3,寫一個實現json鍵值對數據創建和讀寫解析c例程

以下是一個基于 ESP32 - S3 使用 ESP - IDF 框架實現 JSON 鍵值對數據創建、讀寫和解析的 C 語言例程。 環境準備 確保你已經安裝了 ESP - IDF 開發環境&#xff0c;并且可以正常編譯和燒錄代碼到 ESP32 - S3 開發板。 代碼示例 #include <stdio.h> #include <stri…

MyBatis-Plus 使用 Wrapper 構建動態 SQL 有哪些優劣勢?

MyBatis-Plus (MP) 提供的 Wrapper (如 QueryWrapper, LambdaQueryWrapper, UpdateWrapper, LambdaUpdateWrapper) 是其核心特性之一&#xff0c;它允許我們在開發時以面向對象的方式構建 SQL 的 WHERE 條件、ORDER BY、SELECT 字段列表等部分。與傳統的 MyBatis 在 XML 文件中…

STM32與i.MX6ULL內存與存儲機制全解析:從微控制器到應用處理器的設計差異

最近做FreeRTos&#xff0c;以及前面設計的RVOS&#xff0c;這種RTOS級別的系統內存上的分布與CortexA系列里面的分布有相當大的區別&#xff0c;給我搞糊涂了。 目錄 STM32&#xff08;Cortex-M系列&#xff09;的內存與存儲機制 Flash存儲內容RAM存儲內容啟動與運行時流程示例…

Eteam 0.3版本開發規劃

Eteam 0.1系列經歷了3個小版本&#xff0c;主要完成了團隊資料庫功能。 Eteam 0.2系列經歷了22個小版本&#xff0c;主要完成了白板和AI交互的能力。 目前的問題 目前白板上的數據有兩個來源&#xff0c;團隊資料庫和外部數據。外部數據和團隊資料庫數據邊界不是很清晰。 0.3版…

HTML5好看的水果蔬菜在線商城網站源碼系列模板5

文章目錄 1.設計來源1.1 主界面1.2 關于我們1.3 商品服務1.4 果蔬展示1.5 聯系我們1.6 商品具體信息1.7 登錄注冊 2.效果和源碼2.1 動態效果2.2 源代碼 源碼下載萬套模板&#xff0c;程序開發&#xff0c;在線開發&#xff0c;在線溝通 作者&#xff1a;xcLeigh 文章地址&#…

深入理解Java包裝類:自動裝箱拆箱與緩存池機制

深入理解Java包裝類&#xff1a;自動裝箱拆箱與緩存池機制 對象包裝器 Java中的數據類型可以分為兩類&#xff1a;基本類型和引用類型。作為一門面向對象編程語言&#xff0c; 一切皆對象是Java語言的設計理念之一。但基本類型不是對象&#xff0c;無法直接參與面向對象操作&…

uniapp自定義拖拽排列

uniapp自定義拖拽排列并改變下標 <!-- 頁面模板 --> <template><view class"container"><view v-for"(item, index) in list" :key"item.id" class"drag-item" :style"{transform: translate(${activeInde…

基于SpringBoot的課程管理系統

前言 今天給大家分享一個基于SpringBoot的課程管理系統。 1 系統介紹 課程管理系統是一種專門為學校設計的軟件系統&#xff0c;旨在幫助學校高效地管理和組織各類課程信息。 該系統通常包括學生、教師和管理員三大角色。 他們可以通過系統進行選課、查看課程表、考試、進…

max31865典型電路

PT100讀取有很多種方案&#xff0c;常用的惠斯通電橋&#xff0c;和專用IC max31865 。 電阻溫度檢測器(RTD)是一種阻值隨溫度變化的電阻。鉑是最常見、精度最高的測溫金屬絲材料。鉑RTD稱為PT-RTD&#xff0c;鎳、銅和其它金屬亦可用來制造RTD。RTD具有較寬的測溫范圍&#x…

飛算 JavaAI 與 Spring Boot:如何實現微服務開發效率翻倍?

微服務架構憑借其高內聚、低耦合的特性&#xff0c;成為企業構建復雜應用系統的首選方案。然而&#xff0c;傳統微服務開發流程中&#xff0c;從服務拆分、接口設計到代碼編寫、調試部署&#xff0c;往往需要耗費大量時間與人力成本。Spring Boot 作為 Java 領域最受歡迎的微服…

(2)Docker 常用命令

文章目錄 Docker 服務器Docker 鏡像Docker 容器本地 RegistryRUN vs CMD vs ENTRYPOINTRUNCMDENTRYPOINT 限制容器對內存、CPU 和 IO 資源的使用內存CPUBlock IO設置權重bps 和 iops cgroup 和 namespacecgroupnamespacMount namespaceUTS namespaceIPC namespacePID namespace…

Django 實現電影推薦系統:從搭建到功能完善(附源碼)

前言&#xff1a;本文將詳細介紹如何使用 Django 構建一個電影推薦系統&#xff0c;涵蓋項目的搭建、數據庫設計、視圖函數編寫、模板渲染以及用戶認證等多個方面。&#x1f517;軟件安裝、環境準備 ? 【作者主頁—&#x1f4da;閱讀更多優質文章、獲取更多優質源碼】 目錄 一…

C#進階學習(七)常見的泛型數據結構類(2)HashSet和SortedSet

目錄 using System.Collections.Generic; // 核心命名空間 一、 HashSet 核心特性 常用方法 屬性 二、SortedSet 核心特性 1、整型&#xff08;int、long 等&#xff09; 2、字符串型&#xff08;string&#xff09; 3、字符型&#xff08;char&#xff09; 4、自定義…

SQL之DML(查詢語句:select、where)

&#x1f3af; 本文專欄&#xff1a;MySQL深入淺出 &#x1f680; 作者主頁&#xff1a;小度愛學習 select查詢語句 在開發中&#xff0c;查詢語句是使用最多&#xff0c;也是CRUD中&#xff0c;復雜度最高的sql語句。 查詢的語法結構 select *|字段1 [, 字段2 ……] from 表…

vue | 不同 vue 版本對復雜泛型的支持情況 · vue3.2 VS vue3.5

省流總結&#xff1a;defineProps 的泛型能力&#xff0c;來直接推導第三方組件的 props 類型 引入第三方庫的類型&#xff0c;并直接在 <script setup> 中作為 props 使用。這種類型一般是復雜泛型&#xff08;包含聯合類型、可選屬性、交叉類型、條件類型等&#xff0…

Unity-無限滾動列表實現Timer時間管理實現

今天我們來做一個UI里經常做的東西&#xff1a;無限滾動列表。 首先我們得寫清楚實現的基本思路&#xff1a; 所謂的無限滾動當然不是真的無限滾動&#xff0c;我們只要把離開列表的框再丟到列表的后面就行&#xff0c;核心理念和對象池是類似的。 我們來一點一點實現&#x…

Docker的基本概念和一些運用場景

Docker 是一種開源的容器化平臺&#xff0c;可以幫助開發人員更加高效地打包、發布和運行應用程序。以下是 Docker 的基本概念和優勢&#xff1a; 基本概念&#xff1a; 容器&#xff1a;Docker 使用容器來打包應用程序及其依賴項&#xff0c;容器是一個獨立且可移植的運行環境…