Python-OpenCV中的圖像處理-圖像特征

Python-OpenCV中的圖像處理-圖像特征

  • 圖像特征
    • Harris角點檢測
    • 亞像素級精度的角點檢測
    • Shi-Tomasi角點檢測
    • SIFT(Scale-Invariant Feature Transfrom)
    • SURF(Speeded-Up Robust Features)

圖像特征

  • 特征理解
  • 特征檢測
  • 特征描述

Harris角點檢測

  • cv2.cornerHarris(img, blockSize, ksize, k, borderType=…)
    • img:輸入圖像,數據類型為float32
    • blockSize:角點檢測中要考慮的領域大小
    • ksize:Sobe求導中使用的窗口大小
    • k:Harris角點檢測方程中的自由參數,取值參數為 [0.04,0.06]
    • borderType:邊界類型
import numpy as np
import cv2
from matplotlib import pyplot as plt# img = cv2.imread('./resource/opencv/image/chessboard.png', cv2.IMREAD_COLOR)
img = cv2.imread('./resource/opencv/image/pattern.png', cv2.IMREAD_COLOR)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray = np.float32(gray)# 輸入圖像必須是float32,最后一個參數在0.04到0.05之間
dst = cv2.cornerHarris(gray, 2, 3, 0.05)
dst = cv2.dilate(dst, None)img[dst>0.01*dst.max()] = [0, 0, 255]cv2.imshow('dst', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這里插入圖片描述

亞像素級精度的角點檢測

  • cv2.cornerSubPix(img, corners, winSize, zeroZone, criteria)
    最大精度的角點檢測,首先要找到 Harris角點,然后將角點的重心傳給這個函數進行修正。
import numpy as np
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('./resource/opencv/image/subpixel.png', cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
dst = cv2.dilate(dst, None)
ret, dst = cv2.threshold(dst, 0.01*dst.max(), 255, 0)
dst = np.uint8(dst)ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)corners = cv2.cornerSubPix(gray, np.float32(centroids), (5,5), (-1, -1), criteria)res = np.hstack((centroids, corners))res = np.int0(res)
img[res[:,1],res[:,0]]=[0,0,255]
img[res[:,3],res[:,2]]=[0,255,0]cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Harris 角點用紅色像素標出,綠色像素是修正后的角點。
在這里插入圖片描述

Shi-Tomasi角點檢測

  • cv2.goodFeatureToTrack()
import numpy as np
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('./resource/opencv/image/shitomasi_block.jpg', cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)corners = cv2.goodFeaturesToTrack(gray, 25, 0.01, 10)corners = np.int0(corners)for i in corners:x,y = i.ravel()cv2.circle(img, (x,y), 3, 255, -1)plt.imshow(img)
plt.show()

在這里插入圖片描述

SIFT(Scale-Invariant Feature Transfrom)

  • SIFT,即尺度不變特征變換(Scale-invariant feature transform,SIFT),是用于圖像處理領域的一種描述。這種描述具有尺度不變性,可在圖像中檢測出關鍵點,是一種局部特征描述子。

  • cv2.SIFT_create()

    • kp = sift.detect(img, None):查找特征點
    • kp, des = sift.compute(img, kp):計算特征點
    • kp, des = sift.detectAndCompute(img, None) :直接找到特征點并計算描述符
  • cv2.drawKeypoints(img, kp, out_img, flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS):畫特征點

    • img : 輸入圖像
    • kp:圖像特征點
    • out_img:輸出圖像
    • flags:
      cv2.DRAW_MATCHES_FLAGS_DEFAULT
      cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG
      cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
      cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS
import numpy as np
import cv2# 讀取圖片
# img = cv2.imread('./resource/opencv/image/home.jpg')
img = cv2.imread('./resource/opencv/image/AverageMaleFace.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, flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_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])cv2.imshow('kp', key_points)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這里插入圖片描述

SURF(Speeded-Up Robust Features)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36504.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

海格里斯HEGERLS四向穿梭車倉儲解決方案在電子商務行業中的應用

隨著現代物流,尤其是智能化物流的飛速發展,河北沃克金屬制品有限公司看到了智能物流領域背后的巨大價值和市場空間,深知物流與供應鏈對企業發展的重要性。于是,引進了先進的高科技智能技術—HEGERLS四向穿梭車技術,并迅…

【日常積累】Linux下文件亂碼解決

linux下刪除亂碼文件、目錄 由于編碼原因,在linux服務器上上傳、創建中文文件或目錄時,會產生亂碼,如果想刪除它,有時候發現用rm命令是刪除不了的 這種情況下,用find命令可以刪除亂碼的文件或目錄。 首先進入亂碼文件…

docker 網絡訪問診斷

本地docker開啟nginx服務等, 發現linux系統重啟之后,無法訪問, 進入容器內部,發現可以訪問 但是容器外部,映射端口無法訪問; 診斷之前,發現docker0沒有IP綁定 rootbook:/etc/docker# ip addr …

自制手寫機器人

寫字機器人模擬在畫圖板上寫字效果 寫了一套寫字機器人代碼,有多種字體可供選擇,需要的朋友私信獲取代碼和軟件

Spring5學習筆記— 工廠高級特性

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人😉😉 🍎個人主頁:Leo的博客 💞當前專欄: Spring專欄 ?特色專欄: M…

創建型模式-原型模式

文章目錄 一、原型模式1. 概述2. 結構3. 實現4. 案例1.5 使用場景1.6 擴展(深克隆) 一、原型模式 1. 概述 用一個已經創建的實例作為原型,通過復制該原型對象來創建一個和原型對象相同的新對象。 2. 結構 原型模式包含如下角色: …

微服務架構和分布式架構的區別

微服務架構和分布式架構的區別 有:1、含義不同;2、概念層面不同;3、解決問題不同;4、部署方式不同;5、耦合度不同。其中,含義不同指微服務架構是一種將一個單一應用程序開發為一組小型服務的方法&#xff…

使用windows搭建WebDAV服務,并內網穿透公網訪問【無公網IP】

文章目錄 1. 安裝IIS必要WebDav組件2. 客戶端測試3. 使用cpolar內網穿透,將WebDav服務暴露在公網3.1 打開Web-UI管理界面3.2 創建隧道3.3 查看在線隧道列表3.4 瀏覽器訪問測試 4. 安裝Raidrive客戶端4.1 連接WebDav服務器4.2 連接成功4.2 連接成功 1. Linux(centos8…

【Vue-Router】路由入門

路由(Routing)是指確定網站或應用程序中特定頁面的方式。在Web開發中,路由用于根據URL的不同部分來確定應用程序中應該顯示哪個內容。 構建前端項目 npm init vuelatest //或者 npm init vitelatest安裝依賴和路由 npm install npm instal…

TCP重連 - 筆記

1 C++ TCP/IP 關于tcp斷線重連的問題 C++ TCP/IP 關于tcp斷線重連的問題_c++ 斷線重連_Bug&猿柒。的博客-CSDN博客 2 C++基礎--完善Socket C/S ,實現客戶端,服務器端斷開重連 https://www.cnblogs.com/kingdom_0/articles/2571727.html 3 C++實現Tcp通信(考慮客戶…

ATF BL1 UFS初始化簡單分析

ATF BL1 UFS初始化分析 1 ATF的下載鏈接2 ATF BL1 UFS 初始化簡易流程圖3 ATF BL1 ufs初始化簡單過程分析3.1 調用過程3.2 hikey960_ufs_init3.3 dw_ufs_init3.3 ufs_init 以海思hikey960為例來介紹,簡單介紹在ATF BL1階段的初始化處理。 1 ATF的下載鏈接 https:/…

藍帽杯 取證2022

網站取證 網站取證_1 下載附件 并解壓 得到了一個文件以及一個壓縮包 解壓壓縮包 用火絨查病毒 發現后門 打開文件路徑之后 發現了一句話木馬 解出flag 網站取證_2 讓找數據庫鏈接的明文密碼 打開www文件找找 查看數據庫配置文件/application/database.php(CodeI…

Vue3.2+TS的父傳子,子傳父

這是父組件 <template><div><!-- 這個fn是子組件emit觸發名&#xff0c;兩邊保持一致 --><Child :num"num" fn"numUp"></Child></div> </template><script setup lang"ts"> import { ref } fr…

截止到目前全量主體總數有多少?

企業主體類型 企業主體類型有很多種&#xff0c;一般我們會分為公司&#xff08;有限責任&#xff09;、合伙企業、個人獨資企業、個體經營戶這些類別。 今天我們按照企業&#xff0c;個體&#xff0c;組織的分類方式來看各個主體的總數。 企業&#xff1a;統一社會信用代碼…

基于IP網絡的存儲協議——iSCSI

文章首發地址 iSCSI&#xff08;Internet Small Computer System Interface&#xff09;是一種基于IP網絡的存儲協議&#xff0c;它能夠在TCP/IP網絡上實現SCSI協議&#xff0c;使得不同的主機可以通過網絡共享存儲設備。iSCSI可以將存儲設備映射到本地主機上&#xff0c;使得主…

ARTS 挑戰打卡的第7天 --- Ubuntu中的WindTerm如何設置成中文,并且關閉shell中Tab鍵聲音(Tips)

前言 &#xff08;1&#xff09;Windterm是一個非常優秀的終端神器。關于他的下載我就不多說了&#xff0c;網上很多。今天我就分享一個國內目前沒有找到的這方面的資料——Ubuntu中的WindTerm如何設置成中文&#xff0c;并且關閉shell中Tab鍵聲音。 將WindTerm設置成中文 &…

【Mac】mac 系統下格式化U盤或移動硬盤為ext4格式

1. 打開終端&#xff0c;安裝 homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2. 安裝之后再次運行此命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"…

學習C++資料集合

學習C C 是一個難學易用的語言&#xff01; C 的難學&#xff0c;不僅在其廣博的語法&#xff0c;以及語法背後的語意&#xff0c;以及語意背後的深層思維&#xff0c;以及深層思維背後的物件模型&#xff1b; C 的難學&#xff0c;還在於它提供了四種不同&#xff08;但相輔相…

第五十三天

●剪輯——Pr 剪輯(Film editing)&#xff0c;即將影片制作中所拍攝的大量素材&#xff0c;經過選擇、取舍、分解與組接&#xff0c;最終完成一個連貫流暢、含義明確、主題鮮明并有藝術感染力的作品。 ?線性編輯 將素材按時間順序連接成新的連續畫面的技術 ?非線性編輯 …

Unity zSpace 開發

文章目錄 1.下載 zSpace 開發環境1.1 zCore Unity Package1.2 zView Unity Package 2. 導入工程3. 發布設置4.功能實現4.1 用觸控筆來實現對模型的拖拽&#xff1a; 5. 后續更新 1.下載 zSpace 開發環境 官網地址 1.1 zCore Unity Package zSpace 開發核心必須 1.2 zView …