国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV(圖像處理)-基于Python-特征檢測-特征點匹配

這篇具有很好參考價值的文章主要介紹了OpenCV(圖像處理)-基于Python-特征檢測-特征點匹配。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python

1.圖像特征

圖像特征就是指有意義的圖像區(qū)域,具有獨特性,易于識別性,比如角點、斑點以及高密度區(qū)。而為什么角點具有重要的特征呢?
看下圖:
python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python
觀察ABD三張圖片,我們不容易得知圖像的位置,而CEF三張圖我們特別容易找到它們在原圖中對應的位置,這是因為ABD比較平滑,我們不易找出他們的特點,而CEF三張圖有很明顯的輪廓特征,有很多邊緣特征即角點,因此一幅圖像中的角點非常重要。
想讓計算機具有識別圖片的功能,首先要讓他們學會提取圖片的特征,提取圖像的角點。

角點的特征

  • 在特征中最重要的是角點
  • 是灰度梯度最大值所對應的像素
  • 兩條線的交點
  • 極值點(一階導數(shù)最大值但是二階導數(shù)為0)

2. 哈里斯檢測

原理:
python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python
圖1方塊上下左右移動都沒有變化,說明圖1不是角點;圖2上下沒有變化,左右移動有變化,說明圖2是邊緣;圖3上下左右移動都有變化,說明圖3是角點。

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python

cornerHarris()

dst = cv2.cornerHarris(img, blockSize, ksize, k)
img :需要檢測的圖像,最好為灰度圖
blockSize:檢測窗口的大小,一般取2
ksiez:Sobel卷積核,一般取3
k:權(quán)重系數(shù),經(jīng)驗值,一般取0.02~0.04之間
返回值:dst不是圖像,是點的集合
缺點:k是個經(jīng)驗值需要自己調(diào)節(jié)

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img = cv2.imread('./image/chess.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Harris角點檢測
dst = cv2.cornerHarris(gray, 2, 3, 0.02)

# 表示img中dst值大于0.01*dst.max()的像素點索引出來,然后將這些像素點的值賦為 [0,0,255]。
img[dst > 0.01*dst.max()] = [0, 0, 255]
cv2.imshow('img', img)

cv2.waitKey(0)

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python

3.Shi-Tomasi角點檢測

Shi-Tomasi是Harris角點檢測的改進,因為Harris角點檢測的穩(wěn)定性與k有關,而k是個經(jīng)驗值,與人的主觀因素有關。Shi-Tomasi避免了這個問題。

goodFeaturesToTrack()

dst = cv2.goodFeaturesToTrack(img, maxCorners, qualityLevel, minDistance)
img:需要檢測的圖像,最好為灰度圖
maxCorners:角點的最大數(shù)量,值為0表示無限制
qualityLevel:小于1.0的正數(shù),一般在0.01-1.0之間
minDistance:角之間最小歐式距離,忽略小于此距離的點
mask:感興趣的區(qū)域,不填默認全部圖像
blockSize:檢測窗口大小
useHarrisDetector:是否使用Harris算法,True/False
k:默認是0.04

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img = cv2.imread('./image/chess.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Harris角點檢測
# dst = cv2.cornerHarris(gray, 2, 3, 0.02)

maxCorners = 100
ql = 0.01
minDistance = 10
# ShiTomasi角點檢測
corners = cv2.goodFeaturesToTrack(gray, maxCorners, ql, minDistance)
# corners為float32類型,需要轉(zhuǎn)化為整型
corners = np.int0(corners)
# 表示img中dst值大于0.01*dst.max()的像素點索引出來,然后將這些像素點的值賦為 [0,0,255]。
# img[dst > 0.01*dst.max()] = [0, 0, 255]

for i in corners:
    x, y = i.ravel() # 將迭代的數(shù)組,轉(zhuǎn)化成一維的
    cv2.circle(img, (x, y), 3, (0, 0, 255), -1)

cv2.imshow('img', img)

cv2.waitKey(0)

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python

4.Scale-Invariant Feature Transform(SIFT)

該算法是與縮放無關的特征檢測,比如說,以前是角點,但是在圖放大或縮小后,由于圖片比例的變化,原來是角,放大之后,可能就不是角;原來是角,縮小之后可能就是角。而該算法正好解決了這個問題。
python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python


SIFT能夠計算關鍵點和描述子,關鍵點:位置、大小和方向;關鍵點描述子:記錄了關鍵點周圍對其有貢獻的像素點的一組向量值,其不受仿射變換、光照變換的影響。

SIFT語法

  • 首先創(chuàng)建SIFT對象
  • 進行檢測,kp =sift.detect(img,…)
  • 繪制關鍵點,drawKeypoints(gray, kp, img)
  • 從灰度圖gray中檢測的,關鍵點kp,在原圖img中畫

創(chuàng)建SIFT對象
sift = cv2.xfeatures2d.SIFT_create(什么也不寫)
kp = sift.detect(img, mask)
img:是檢測圖片,盡量用灰度圖
mask:掩碼,指明對圖中哪部分進行檢測,一般填None(全圖)

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img = cv2.imread('./image/chess.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 創(chuàng)建sift對象
sift = cv2.xfeatures2d.SIFT_create()
# 關鍵點檢測
kp = sift.detect(gray, None)
# 使用關鍵點畫圖
cv2.drawKeypoints(gray, kp, img)
cv2.imshow('img', img)

cv2.waitKey(0)

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python


此接口一下能算出關鍵點和描述子
kp, des = sift.detectAndCompute(img, mask)
img:是檢測圖片,盡量用灰度圖
mask:掩碼,指明對圖中哪部分進行檢測,一般填None(全圖)

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img = cv2.imread('./image/chess.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 創(chuàng)建sift對象
sift = cv2.xfeatures2d.SIFT_create()
# kp = sift.detect(gray, None)

kp, des = sift.detectAndCompute(gray, None)

cv2.drawKeypoints(gray, kp, img)
cv2.imshow('img', img)

cv2.waitKey(0)

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python


SIFT缺點:速度慢

5.SURF

由于SIFT速度較慢,因此又產(chǎn)生了SURF算法,該算法速度優(yōu)于SIFT。

  • 首先創(chuàng)建SURF對象
  • 進行檢測,kp, des =surf.detectAndCompute(img, mask)
  • 繪制關鍵點,drawKeypoints(gray, kp, img)
  • 從灰度圖gray中檢測的,關鍵點kp,在原圖img中畫

創(chuàng)建surf對象
surf = cv2. xfeatures2d.SURF_create()
kp, des = surf.detectAndCompute(img, mask)
img:是檢測圖片,盡量用灰度圖
mask:掩碼,指明對圖中哪部分進行檢測,一般填None(全圖)
kp:檢測出的關鍵字
des:是描述子,用來特征匹配使用的

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img = cv2.imread('./image/chess.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# # 創(chuàng)建sift對象
# sift = cv2.xfeatures2d.SIFT_create()

# 創(chuàng)建surf對象
surf = cv2.xfeatures2d.SURF_create()

# 計算關鍵點和描述子
kp, des = surf.detectAndCompute(gray, None)

cv2.drawKeypoints(gray, kp, img)
cv2.imshow('img', img)

cv2.waitKey(0)

注意:此算法由于付費的緣由,需要使用3.4.2.17版本的opencv庫

6.ORB(Oriented FAST and Rotated BRIEF)

其中FAST用于特征檢測,BRIEF是對已檢測到的特征點進行描述,它加快了特征描述符的建立速度,同時也極大降低了特征匹配的時間。
ORB的優(yōu)勢在于:速度快,可用于實時監(jiān)測;免費。

先建立ORB對象
orb = cv2.ORB_create()
計算特征點與描述子
kp, des = orb.detectAndCompute(img, mask)
使用kp畫出特征點
cv2.drawKeypoints(gray, kp, img)

img:是檢測圖片,盡量用灰度圖
mask:掩碼,指明對圖中哪部分進行檢測,一般填None(全圖)

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img = cv2.imread('./image/chess.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 創(chuàng)建orb對象
orb = cv2.ORB_create()
# 對ORB進行檢測
kp, des = orb.detectAndCompute(gray, None)

cv2.drawKeypoints(gray, kp, img)
cv2.imshow('img', img)

cv2.waitKey(0)

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python


檢測出的特征點越來越少,因此在提升檢測速度的同時,精度也在丟失。

7.特征匹配

根據(jù)特征點的描述子進行匹配,特征匹配方法有:

  • BF(Brute-Force),暴力特征匹配方法
  • FLANN 最快臨近區(qū)特征匹配方法

7.1 暴力特征匹配

它使用第一組中的每個特征點的描述子與第二組中的所有特征點的描述子進行匹配,計算他們之間的差距,然后將最接近的一個匹配返回

  • 創(chuàng)建匹配器,bf = cv2.BFMatcher(normType, crossCheck)
  • 進行特征匹配,match = bf. match(des1, des2)
  • 繪制匹配點, cv2.drawMatches(img1, kp1, img2, kp2,…)

創(chuàng)建匹配器
bf = cv2.BFMatcher(normType, crossCheck)
normType:NORM_L1(SIFT),NORM_L2(SURF), HAMMING1(ORB)
crossCheck:是否進行交叉匹配,默認為false
描述子進行匹配
match = bf.match(dst1, dst2)
dst1:要搜索的圖的描述子
dst2:從庫里能匹配的描述子
畫相同的地方
img3 = cv2.drawMatchers(img1, kp1, img2, kp2, match, None)
img1, kp1:要搜索的圖,和特征點
img2, kp2:從庫里匹配的圖和特征點
match:匹配好的描述子

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img1 = cv2.imread('./image/opencv_search.png')
img2 = cv2.imread('./image/opencv_orig.png')
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# 創(chuàng)建orb對象
orb = cv2.ORB_create()
# 對ORB進行檢測
kp1, dst1 = orb.detectAndCompute(gray1, None)
kp2, dst2 = orb.detectAndCompute(gray2, None)

# 創(chuàng)建匹配器
bf = cv2.BFMatcher(cv2.NORM_HAMMING)
# 描述子進行匹配
match = bf.match(dst1, dst2)

img3 = cv2.drawMatches(img1, kp1, img2, kp2, match, None)

cv2.imshow('img3', img3)

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python

7.2 FLANN

  • 進行批量特征匹配時,F(xiàn)LANN速度更快
  • 由于它使用的是臨近近似值,所以精度較差

創(chuàng)建匹配器
flann = cv2.FlannBasedMatcher()
進行特征匹配
match = flann.match()
繪制匹配點
img3 = cv2.drawMatches()

import cv2
import numpy as np

# 讀取圖片,并轉(zhuǎn)為灰度圖
img1 = cv2.imread('./image/opencv_search.png')
img2 = cv2.imread('./image/opencv_orig.png')
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# 創(chuàng)建orb對象
orb = cv2.ORB_create()
# 對ORB進行檢測
kp1, dst1 = orb.detectAndCompute(gray1, None)
kp2, dst2 = orb.detectAndCompute(gray2, None)
# 判斷描述子的數(shù)據(jù)類型,若不符合,則進行數(shù)據(jù)替換
if dst1.dtype != 'float32':
    dst1 = dst1.astype('float32')
if dst2.dtype != 'float32':
    dst2 = dst2.astype('float32')

# 創(chuàng)建匹配器(FLANN)
flann = cv2.FlannBasedMatcher()
# 描述子進行匹配計算
matches = flann.match(dst1, dst2)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches, None)

cv2.imshow('img3', img3)

python open cv sift 特征匹配,圖像處理,opencv,圖像處理,python文章來源地址http://www.zghlxwxcb.cn/news/detail-777337.html

到了這里,關于OpenCV(圖像處理)-基于Python-特征檢測-特征點匹配的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 圖像處理(二)之 基于OpenCV的水泥裂縫檢測(區(qū)域延申)

    圖像處理(二)之 基于OpenCV的水泥裂縫檢測(區(qū)域延申)

    一、基本邏輯思路 1. 讀取圖形、修改尺寸、灰度圖轉(zhuǎn)換 2. 直方圖均衡化 原理: ????????直方圖均衡化通常是對圖像灰度值進行歸一化的方法,并且可以增強圖像的對比度; ????????圖像中像素個數(shù)多的灰度級進行展寬,而對圖像中像素個數(shù)少的灰度進行壓縮,從而擴

    2023年04月09日
    瀏覽(25)
  • Python-OpenCV中的圖像處理-邊緣檢測

    Python-OpenCV中的圖像處理-邊緣檢測

    Canny 邊緣檢測是一種非常流行的邊緣檢測算法,是 John F.Canny 在 1986 年提出的。它是一個有很多步構(gòu)成的算法:噪聲去除、計算圖像梯度、非極大值抑制、滯后閥值等。 Canny(image: Mat, threshold1, threshold2, edges=…, apertureSize=…, L2gradient=…) 在 OpenCV 中只需要一個函數(shù): cv2.Canny(),

    2024年02月13日
    瀏覽(35)
  • 基于 OpenCV 的車輛變道檢測,計算機視覺+圖像處理技術(shù)

    基于 OpenCV 的車輛變道檢測,計算機視覺+圖像處理技術(shù)

    本期教程我們將和小伙伴們一起研究如何使用計算機視覺和圖像處理技術(shù)來檢測汽車在行駛中時汽車是否在改變車道!大家一定聽說過使用 OpenCV 的 haar 級聯(lián)文件可以檢測到面部、眼睛等,但是如果目標是汽車,公共汽車呢? 01. 數(shù)據(jù)集 我們將道路上汽車的視頻文件用作數(shù)據(jù)

    2024年01月25日
    瀏覽(105)
  • OpenCV基本圖像處理操作(十)——圖像特征harris角點

    OpenCV基本圖像處理操作(十)——圖像特征harris角點

    角點 角點是圖像中的一個特征點,指的是兩條邊緣交叉的點,這樣的點在圖像中通常表示一個顯著的幾角。在計算機視覺和圖像處理中,角點是重要的特征,因為它們通常是圖像中信息豐富的區(qū)域,可以用于圖像分析、對象識別、3D建模等多種應用。 角點的識別可以幫助在進

    2024年04月23日
    瀏覽(103)
  • OpenCV(圖像處理)-基于Python-輪廓查找

    OpenCV(圖像處理)-基于Python-輪廓查找

    一個圖像中具有相同顏色或強度(灰度圖)的連續(xù)點所組成的集合,就是輪廓。輪廓可用于圖形分析、物體的識別與檢測等等。 在圖像中,為了防止輪廓邊緣強弱不明顯,需要先對圖像進行二值化或Canny操作(一般改為黑底白字), 畫輪廓時會修改輸入的圖像。 查找圖形的

    2024年02月09日
    瀏覽(95)
  • Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單實戰(zhàn)案例 之六 簡單圖像傾斜校正處理效果

    Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單實戰(zhàn)案例 之六 簡單圖像傾斜校正處理效果

    目錄 Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單實戰(zhàn)案例 之六 簡單圖像傾斜校正處理效果 一、簡單介紹 二、簡單圖像傾斜校正處理效果實現(xiàn)原理 三、簡單圖像傾斜校正處理效果案例實現(xiàn)簡單步驟 四、注意事項 Python是一種跨平臺的計算機程序設計語言。是一種面向?qū)?/p>

    2024年04月13日
    瀏覽(28)
  • Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 視頻圖像處理基礎操作 之 視頻捕獲/存儲/提取/合成/合并

    目錄 Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 視頻圖像處理基礎操作 之 視頻捕獲/存儲/提取/合成/合并 一、簡單介紹 二、視頻處理流程和原理 三、視頻的捕獲和存儲 四、提取視頻中的某些幀 五、將圖片合成為視頻 六、多個視頻合并 Python是一種跨平臺的計算機程序設計

    2024年04月10日
    瀏覽(164)
  • Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 背景知識

    Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 背景知識

    目錄 Python? 基于 OpenCV 視覺圖像處理實戰(zhàn)? 之 背景知識 一、簡單介紹 二、人工智能(Artificial Intelligence,AI) 三、OpenCV 四、計算機視覺任務的主要類型 五、計算機視覺是通過創(chuàng)建人工模型來模擬本該由人類執(zhí)行的視覺任務。 Python是一種跨平臺的計算機程序設計語言。是一

    2024年04月12日
    瀏覽(106)
  • OpenCV(圖像處理)-基于Python-圖像的基本變換-平移-翻轉(zhuǎn)-仿射變換-透視變換

    OpenCV(圖像處理)-基于Python-圖像的基本變換-平移-翻轉(zhuǎn)-仿射變換-透視變換

    為了方便開發(fā)人員的操作,OpenCV還提供了一些圖像變換的API,本篇文章講簡單介紹各種API的使用,并附上一些樣例。 圖像縮放函數(shù),用于把圖像按指定的尺寸放大或縮小。 dst = cv2.resize(src, dsize, fx, fy, interpolation) dst = 生成的目的圖像 src:需要變換的原圖像 disize:(x, y)需要

    2024年02月08日
    瀏覽(99)
  • 數(shù)字圖像處理(實踐篇)二十九 OpenCV-Python在圖像中檢測矩形、正方形和三角形的實踐

    數(shù)字圖像處理(實踐篇)二十九 OpenCV-Python在圖像中檢測矩形、正方形和三角形的實踐

    目錄 1 方案 2 實踐 1 方案 ①檢測矩形和正方形 ⒈檢測圖像中的所有輪廓。 ⒉循環(huán)檢查所有檢測到的輪廓。 ⒊為每個輪廓找到近似的輪廓。如果近似輪廓中的頂點數(shù)為4,則計算 寬高比 用來區(qū)分 矩形 和 正方形 。如果寬高比在0.9到1.1之間,則認為為正方形,否則的話,則為

    2024年01月25日
    瀏覽(99)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包