31.OpenCV的特征檢測——示例
文章目錄
- 前言
- 一、應用Shi-Tomasi角檢測器
- 二、應用特征匹配查找物件
- 三、OpenCV-Python資源下載
- 總結
前言
??影像的特征是指影像中具有獨特性和易于識別性的區域,角、邊緣等都屬于有意義的特征,OpenCV可以檢測并提取影像的特征,并對其進行描述,以便用于影像匹配和搜索,
一、應用Shi-Tomasi角檢測器
# 應用Shi-Tomasi角檢測器
import cv2
import numpy as np
img = cv2.imread("bridge.jpg")
cv2.imshow("Bridge", img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
corners = cv2.goodFeaturesToTrack(gray,10,0.1,10)
corners = np.int0(corners)
for i in corners:
x, y = i.ravel()
cv2.circle(img, (x,y), 4, (0,0,255), -1)
cv2.imshow("Shi-Tomasi",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、應用特征匹配查找物件
import cv2
import numpy as np
img1 = cv2.imread("printer1.jpg" )
img2 = cv2.imread("printer2.jpg" )
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
bf = cv2.BFMatcher_create(cv2.NORM_HAMMING, crossCheck = True)
ms = bf.match(des1,des2)
ms = sorted(ms, key = lambda x:x.distance)
matchesMask = None
if len(ms) > 10:
# 計算查詢影像匹配結果的坐標
querypts = np.float32([kp1[m.queryIdx].pt for m in ms]).reshape(-1,1,2)
# 計算訓練影像匹配結果的坐標
trainpts = np.float32([kp2[m.trainIdx].pt for m in ms]).reshape(-1,1,2)
# 執行查詢影像和訓練影像的透視轉換
retv, mask = cv2.findHomography(querypts, trainpts, cv2.RANSAC)
# 計算最佳匹配結果的掩膜,用于繪制匹配匹配結果
matchesMask = mask.ravel().tolist()
h, w, c = img1.shape
pts = np.float32([[0,0], [0,h-1], [w-1,h-1], [w-1,0]]).reshape(-1,1,2)
# 執行向量的透視矩陣轉換,獲得查詢影像在訓練影像中的位置
dst = cv2.perspectiveTransform(pts,retv)
# 用白色的矩形在訓練影像中繪制出查詢影像的范圍
img2 = cv2.polylines(img2, [np.int32(dst)], True, (255,255,255),5)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, ms, None,
matchColor = (0,255,0),
singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
cv2.imshow("Result img",img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、OpenCV-Python資源下載
OpenCV-Python測驗用圖片、中文官方檔案、opencv-4.5.4原始碼
總結
??以上內容介紹了OpenCV-Python的特征檢測的相關示例,有關Python、資料科學、人工智能等文章后續會不定期發布,請大家多多關注,一鍵三連喲(●’?’●),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400405.html
標籤:其他
