婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > OpenCV半小時掌握基本操作之SIFT算法

OpenCV半小時掌握基本操作之SIFT算法

熱門標簽:湛江電銷防封卡 徐州天音防封電銷卡 佛山防封外呼系統收費 南昌辦理400電話怎么安裝 鄭州智能外呼系統運營商 電話機器人適用業務 不錯的400電話辦理 哈爾濱外呼系統代理商 獲客智能電銷機器人

概述

OpenCV 是一個跨平臺的計算機視覺庫, 支持多語言, 功能強大. 今天小白就帶大家一起攜手走進 OpenCV 的世界. (第 24 課)

圖像尺度空間

在一定的范圍內, 無論物體是大還是小, 人眼都可以分辨出來. 而計算機要有相同的能力卻很難, 所以要讓機器能夠對物體在不同尺度下有一個統一的認知, 就需要考慮圖像在不同的尺度下都存在的特點.

多分辨率金字塔

使用高斯模糊, 不同的 σ 決定了圖像的平滑程度, 越大的 σ 值對應的圖像越模糊. 通過使用不同的 σ 我們可以實現多分辨率金字塔.

高斯模糊:

cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
  • src: 需要濾波的圖片
  • ksize: 卷積核大小
  • sigmaX: 高斯核函數在 X 方向的的標準偏差
  • sigmaY: 高斯核函數在 Y 方向的的標準偏差

例子:

import cv2
from matplotlib import pyplot as plt

# 讀取圖片
img = cv2.imread("face.jpg")

# 畫圖
f, ax = plt.subplots(2, 3, figsize=(12, 8))
ax[0, 0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[0, 0].set_title("original")
ax[0, 0].set_xticks([])
ax[0, 0].set_yticks([])


# 高斯模糊
for i in range(1, 6):

    # 高斯模糊
    image_blur = cv2.GaussianBlur(img, (15, 15), i)

    # 計算子圖
    ax[int(i/3), i % 3].imshow(cv2.cvtColor(image_blur, cv2.COLOR_BGR2RGB))

    # 標題
    ax[int(i/3), i % 3].set_title("σ" + str(i))
    ax[int(i/3), i % 3].set_xticks([])
    ax[int(i/3), i % 3].set_yticks([])

# 展示圖片
plt.show()

輸出結果:

高斯差分金字塔

DoG (Difference of Gaussian) 即高斯差分金字塔, 是在高斯金字塔的基礎上構建起來的. 通過對高斯金字塔逐層相減, 得到 t-1 的高斯差分金字塔:

計算極值點

DoG 空間極值檢測: 將每個像素點和同一層周圍的 8 個像素點以及上下兩層的 18 個像素點, 共 26 個像素點進行比較. 如果一像素點大于或小于鄰近的 26 個像素點的時候, 就成為了極值點.

SIFT 算法

SIFT (Scale Invariant Feature Transform), 即尺度不變特征變換匹配算法. SIFT 算法對于旋轉和尺度具有不變性.

函數

實例化 SHIFT 算法:

cv2.SIFT_create()

獲取特征點:

sift.detect(img_gray, None)

繪制特征點:

cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None)
  • image: 輸入圖像
  • keypoints: 特征點
  • outImage: 輸出圖像

將特征點轉換為128 維的向量:

sift.compute(img, kp)

實戰

例子:

import numpy as np
import cv2

# 讀取圖片
img = cv2.imread("face.jpg")
key_points = img.copy()

# 實例化SIFT算法
sift = cv2.SIFT_create()

# 得到特征點
kp = sift.detect(img, None)
print(np.array(kp).shape)

# 繪制特征點
cv2.drawKeypoints(img, kp, key_points)

# 圖片展示
cv2.imshow("key points", key_points)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存圖片
cv2.imwrite("key_points.jpg", key_points)

# 計算特征
kp, des = sift.compute(img, kp)

# 調試輸出
print(des.shape)
print(des[0])

輸出結果:

(2183,)
(2183, 128)
[ 9. 18. 1. 0. 0. 0. 10. 8. 11. 18. 7. 34. 37. 14.
31. 11. 15. 6. 33. 50. 26. 9. 8. 10. 2. 1. 77. 94.
72. 17. 2. 5. 20. 44. 4. 1. 0. 0. 0. 0. 37. 63.
34. 128. 53. 4. 1. 1. 144. 11. 8. 56. 45. 25. 9. 63.
20. 1. 5. 22. 144. 144. 8. 18. 16. 3. 0. 0. 0. 0.
0. 2. 49. 7. 2. 17. 80. 35. 0. 9. 144. 39. 1. 5.
44. 19. 1. 12. 47. 9. 0. 0. 144. 126. 1. 2. 8. 0.
0. 0. 0. 0. 0. 1. 34. 2. 0. 0. 60. 25. 0. 5.
144. 38. 0. 0. 39. 14. 0. 2. 61. 13. 0. 0. 144. 50.
0. 0.]

到此這篇關于OpenCV半小時掌握基本操作之SIFT算法的文章就介紹到這了,更多相關OpenCV SIFT內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python利用opencv實現SIFT特征提取與匹配
  • opencv-python 提取sift特征并匹配的實例
  • 應用OpenCV和Python進行SIFT算法的實現詳解
  • python opencv之SIFT算法示例

標簽:懷化 安康 蘭州 紹興 吉安 廣西 蕪湖 呂梁

巨人網絡通訊聲明:本文標題《OpenCV半小時掌握基本操作之SIFT算法》,本文關鍵詞  OpenCV,半小時,掌握,基本操作,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《OpenCV半小時掌握基本操作之SIFT算法》相關的同類信息!
  • 本頁收集關于OpenCV半小時掌握基本操作之SIFT算法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 建瓯市| 深泽县| 尤溪县| 呼玛县| 固安县| 赣州市| 澎湖县| 穆棱市| 临高县| 中江县| 吴江市| 宣威市| 玉溪市| 张家口市| 清流县| 喜德县| 枞阳县| 红原县| 密山市| 莆田市| 松滋市| 长顺县| 德化县| 旅游| 孝感市| 华安县| 梁河县| 迁西县| 温泉县| 佛坪县| 美姑县| 南通市| 仙桃市| 乐亭县| 通榆县| 莫力| 翼城县| 洪湖市| 雷山县| 琼结县| 新龙县|