Python應(yīng)用案例之利用opencv實(shí)現(xiàn)圖像匹配
1.創(chuàng)作需求
我們通常需要從一幅圖中找到自己想要的信息,例如從一堆表情中找到,自己需要的表情。
2.創(chuàng)作思路
1.使用模板圖片作為卷積核與原圖進(jìn)行卷積運(yùn)算,得出匹配度超過某一閾值的范圍。
2.對該部分進(jìn)行框選
3.工具
主要使用opencv庫實(shí)現(xiàn),通過
cv2.matchTemplate()函數(shù)進(jìn)行實(shí)現(xiàn)。
4.代碼實(shí)現(xiàn)
import cv2
import matplotlib.pyplot as plt
# 讀取圖像
# 路徑不可以有漢字
original_image = cv2.imread('picture.png')
# 轉(zhuǎn)化為灰度圖方便計算
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
# 顯示原圖
plt.figure(figsize=(20, 20))
plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)) # 轉(zhuǎn)換顏色空間以匹配matplotlib
plt.title('Original Image')
plt.axis('off')
plt.show()
# 顯示灰度圖
plt.figure(figsize=(20, 20))
plt.imshow(gray_image, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')
plt.show()
# 加載模板
# 想要從原圖中找到的部分
# 這里截取原圖中一個表情
template = gray_image[90:180, 100:180]
# 模板匹配
# 將選取表情與原圖匹配
result = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED)
# 找到匹配得分最高的區(qū)域
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# 繪制矩形框
threshold = 0.9999 # 根據(jù)需要調(diào)整閾值
if max_val >= threshold:
# 計算矩形框的左上角和右下角坐標(biāo)
top_left = max_loc
bottom_right = (top_left[0] + template.shape[1], top_left[1] + template.shape[0])
# 在原圖上繪制矩形框
cv2.rectangle(original_image, top_left, bottom_right, (0, 0, 255), 2)
# 顯示結(jié)果
plt.figure(figsize=(20, 20))
plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)) # 轉(zhuǎn)換顏色空間以匹配matplotlib
plt.title('Matched Template')
plt.axis('off')
plt.show()5.補(bǔ)充說明
對于閾值的選擇需要自己進(jìn)行嘗試,已找到最優(yōu)解。這個代碼只找了一個,伙伴們可以自己實(shí)現(xiàn),找到圖中所有的模板圖
到此這篇關(guān)于Python應(yīng)用案例之利用opencv實(shí)現(xiàn)圖像匹配的文章就介紹到這了,更多相關(guān)Python opencv圖像匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中動態(tài)創(chuàng)建類實(shí)例的方法
在Java中我們可以通過反射來根據(jù)類名創(chuàng)建類實(shí)例,那么在Python我們怎么實(shí)現(xiàn)類似功能呢?其實(shí)在Python有一個builtin函數(shù)import,我們可以使用這個函數(shù)來在運(yùn)行時動態(tài)加載一些模塊2017-03-03
Python數(shù)據(jù)可視化之從單變量到多變量的方法
Python憑借其強(qiáng)大的可視化庫(如Matplotlib、Seaborn)成為進(jìn)行EDA的首選工具,本文基于一份實(shí)用的Python數(shù)據(jù)可視化速查表,系統(tǒng)介紹從單變量到多變量、從時間序列到文本數(shù)據(jù)的可視化方法,需要的朋友可以參考下2026-01-01
python中實(shí)現(xiàn)迭代器(iterator)的方法示例
我們經(jīng)常需要遍歷一個對象中的元素,在Python中這種功能是通過迭代器來實(shí)現(xiàn)的。下面這篇文章主要給大家介紹了python中實(shí)現(xiàn)迭代器(iterator)的方法示例,需要的朋友可以參考借鑒,下面來一起看看吧。2017-01-01
python實(shí)現(xiàn)雙色球隨機(jī)選號
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)雙色球隨機(jī)選號,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-01-01
解決使用Pandas 讀取超過65536行的Excel文件問題
這篇文章主要介紹了解決使用Pandas 讀取超過65536行的Excel文件問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
使用Python編寫Prometheus監(jiān)控的方法
今天小編就為大家分享一篇關(guān)于使用Python編寫Prometheus監(jiān)控的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10
Python?Concurrent?Futures解鎖并行化編程的魔法示例
Python的concurrent.futures模塊為并行化編程提供了強(qiáng)大的工具,使得開發(fā)者能夠輕松地利用多核心和異步執(zhí)行的能力,本文將深入探討concurrent.futures的各個方面,從基礎(chǔ)概念到高級用法,為讀者提供全面的了解和實(shí)用的示例代碼2023-12-12
python 解決數(shù)據(jù)庫寫入時float自動變?yōu)檎麛?shù)的問題
這篇文章主要介紹了python 解決數(shù)據(jù)庫寫入時float自動變?yōu)檎麛?shù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

