python opencv實(shí)現(xiàn)圖像配準(zhǔn)與比較
本文實(shí)例為大家分享了python opencv實(shí)現(xiàn)圖像配準(zhǔn)與比較的具體代碼,供大家參考,具體內(nèi)容如下
代碼
from skimage import io
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img_path1 = '2_HE_maxarea.png'
img_path2 = '2_IHC_maxarea.png'
img1 = io.imread(img_path1)
img2 = io.imread(img_path2)
img1 = np.uint8(img1)
img2 = np.uint8(img2)
# find the keypoints and descriptors with ORB
orb = cv.ORB_create()
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
# def get_good_match(des1,des2):
# bf = cv.BFMatcher()
# matches = bf.knnMatch(des1, des2, k=2)
# good = []
# for m, n in matches:
# if m.distance < 0.75 * n.distance:
# good.append(m)
# return good,matches
# goodMatch,matches = get_good_match(des1,des2)
# img3 = cv.drawMatchesKnn(img1,kp1,img2,kp2,matches[:20],None,flags=2)
# create BFMatcher object
bf = cv.BFMatcher(cv.NORM_HAMMING, crossCheck=True)
# Match descriptors.
matches = bf.match(des1,des2)
# Sort them in the order of their distance.
matches = sorted(matches, key = lambda x:x.distance)
# Draw first 20 matches.
img3 = cv.drawMatches(img1,kp1,img2,kp2,matches[:20],None, flags=2)
goodMatch = matches[:20]
if len(goodMatch) > 4:
ptsA= np.float32([kp1[m.queryIdx].pt for m in goodMatch]).reshape(-1, 1, 2)
ptsB = np.float32([kp2[m.trainIdx].pt for m in goodMatch]).reshape(-1, 1, 2)
ransacReprojThreshold = 4
H, status =cv.findHomography(ptsA,ptsB,cv.RANSAC,ransacReprojThreshold);
#其中H為求得的單應(yīng)性矩陣矩陣
#status則返回一個(gè)列表來(lái)表征匹配成功的特征點(diǎn)。
#ptsA,ptsB為關(guān)鍵點(diǎn)
#cv2.RANSAC, ransacReprojThreshold這兩個(gè)參數(shù)與RANSAC有關(guān)
imgOut = cv.warpPerspective(img2, H, (img1.shape[1],img1.shape[0]),flags=cv.INTER_LINEAR + cv.WARP_INVERSE_MAP)
# 疊加配準(zhǔn)變換圖與基準(zhǔn)圖
rate = 0.5
overlapping = cv.addWeighted(img1, rate, imgOut, 1-rate, 0)
io.imsave('HE_2_IHC.png', overlapping)
err = cv.absdiff(img1,imgOut)
# 顯示對(duì)比
plt.subplot(221)
plt.title('orb')
plt.imshow(img3)
plt.subplot(222)
plt.title('imgOut')
plt.imshow(imgOut)
plt.subplot(223)
plt.title('overlapping')
plt.imshow(overlapping)
plt.subplot(224)
plt.title('diff')
plt.imshow(err)
plt.show()
結(jié)果:



以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python編程matplotlib繪圖挑鉆石seaborn小提琴和箱線圖
這篇文章主要為大家介紹了Python編程如何使用matplotlib繪圖來(lái)挑出完美的鉆石以及seaborn小提琴和箱線圖,有需要的朋友可以借鑒參考下,希望能夠優(yōu)速幫助2021-10-10
詳談Python中列表list,元祖tuple和numpy中的array區(qū)別
下面小編就為大家分享一篇詳談Python中列表list,元祖tuple和numpy中的array區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
使用python進(jìn)行nc轉(zhuǎn)tif的3種情況解決
在進(jìn)行氣候分析時(shí),很多人都會(huì)用到ERA5數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于如何使用python進(jìn)行nc轉(zhuǎn)tif的3種情況的解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
python 調(diào)試?yán)渲R(shí)(小結(jié))
這篇文章主要介紹了python 調(diào)試?yán)渲R(shí)(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Python解決asyncio文件描述符最大數(shù)量限制的問(wèn)題
這篇文章主要介紹了Python解決asyncio文件描述符最大數(shù)量限制的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
基于Python開(kāi)發(fā)高效文件搜索與內(nèi)容匹配工具
在日常的開(kāi)發(fā)和辦公中,查找和篩選特定文件或文件內(nèi)容的需求十分常見(jiàn),本文將基于PyQt6開(kāi)發(fā)一個(gè)文件搜索工具,有需要的小伙伴可以參考一下2025-03-03
django項(xiàng)目中新增app的2種實(shí)現(xiàn)方法
這篇文章主要介紹了django項(xiàng)目中新增app的2種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Python實(shí)現(xiàn)的多線程同步與互斥鎖功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的多線程同步與互斥鎖功能,涉及Python多線程及鎖機(jī)制相關(guān)操作技巧,需要的朋友可以參考下2017-11-11

