目錄如下:
目錄orb_pratice.py
相關理論
import cv2
import numpy as np
"""該程式使用dataset中的1.jpg和2.jpg,使用sift對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,最後計算匹配程度較高的特徵點的單應性矩陣
"""# 讀取
# 建立sift
sift = cv2.xfeatures2d.sift_create()
# 檢測關鍵點並提取特徵
kp1, des1 = sift.detectandcompute(img1, none)
kp2, des2 = sift.detectandcompute(img2, none)
# 特徵匹配:暴力匹配
bf = cv2.descriptormatcher_create(cv2.descriptormatcher_bruteforce)
matches = bf.match(des1, des2)
# 繪製特徵匹配結果
matches = sorted(matches, key=lambda x: x.distance)
good_matches = matches[:50] # 只取前xx個匹配
result = cv2.drawmatches(img1, kp1, img2, kp2, good_matches,
none, matchcolor=(0, 0, 255), singlepointcolor=(255, 0, 0)) # 只畫前xx個匹配
cv2.imshow('result', result)
# 計算單應性矩陣
pts1, pts2 = ,
for f in good_matches:
h, _ = cv2.findhomography(np.float32(pts1), np.float32(pts2), cv2.rho)
print('單應性矩陣:')
print(h)
cv2.waitkey(0)
該程式使用dataset中的1.jpg和2.jpg,使用sift對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,最後計算匹配程度較高的特徵點的單應性矩陣。
"""該程式使用dataset中的3.jpg和4.jpg,使用orb對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,,最後計算匹配程度較高的特徵點的單應性矩陣
"""# 讀取
# 建立orb
orb = cv2.orb_create()
# 檢測關鍵點並提取特徵
kp1, des1 = orb.detectandcompute(img1, none)
kp2, des2 = orb.detectandcompute(img2, none)
# 特徵匹配:暴力匹配、漢明距離
bf = cv2.bfmatcher(cv2.norm_hamming, crosscheck=true)
matches = bf.match(des1, des2)
# 繪製特徵匹配結果
matches = sorted(matches, key=lambda x: x.distance)
good_matches = matches[:50] # 只取前xx個匹配
result = cv2.drawmatches(img1, kp1, img2, kp2, good_matches, none)
cv2.imshow('result', result)
# 計算單應性矩陣
pts1, pts2 = ,
for f in good_matches:
h, _ = cv2.findhomography(np.float32(pts1), np.float32(pts2), cv2.rho)
print('單應性矩陣:')
print(h)
cv2.waitkey(0)
該程式使用dataset中的3.jpg和4.jpg,使用orb對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,,最後計算匹配程度較高的特徵點的單應性矩陣。
keypoint localization
orientation assignment
keypoint descriptor
特點實現
可以分為4個步驟
構造影象金字塔
在不同降取樣大小的影象下進行fast特徵點提取,進而得到特徵點的尺度資訊
fast演算法
對於影象中乙個畫素點p,其灰度值為ip
以該畫素點為中心考慮乙個半徑為3的離散化的bresenham圓,圓邊界上有16個畫素
設定乙個合適的閾值t,如果圓上有n個連續畫素點的灰度值小於ip−t或者大於ip+t,那麼這個點即可判斷為特徵點(角點),n的值可取9、11、12。
執行完fast演算法,會得到大量特徵點,需要用nms篩選
計算旋轉角度
計算旋轉後的brief描述子
steered brief
rotated brief
單應性變換的作用
單應性變換具有很強的實用性,比如影象配準,影象糾正和紋理扭曲,以及建立全景影象。
關於齊次座標
歡迎討論和交流!
使用Python和OpenCV檢測和標記湖面輪廓
我和小冬瓜 2018 08 04 17 00 opencv是乙個跨平台的計算機視覺庫,廣泛的被應用於物體識別,機器視覺和影象處理等領域。這篇文章裡我們將使用opencv探測地圖中湖面的輪廓,並標記面積最大的湖面。下面示例中來至於goolge地圖截圖。我們需要做的第一件事情就是在我們的python環境...
使用Python和OpenCV進行文字偏斜校正
這篇部落格將介紹如何使用python和opencv進行文字偏斜校正。給定影象包含未知角度的旋轉文字塊,需要通過以下方法糾正文字傾斜 該演算法本身非常簡單,僅依賴於基本的影象處理技術,例如閾值處理,計算旋轉矩形的最小面積,然後應用仿射變換來校正偏斜。通常會在自動文件分析中使用這種文字偏斜校正演算法,目...
Python安裝OpenCV 基本使用
第一步 安裝numpy 第二步 安裝opencv contrib python 設定捕獲視窗大小 ret cap.set 4,240 while cap.isopened ret,frame cap.read gray cv2.cvtcolor frame,cv2.color bgr2gray 彩色...