OpenCV進階操作:角點檢測

文章目錄

  • 一、角點檢測
    • 1、定義
    • 2、檢測流程
      • 1)輸入圖像
      • 2)圖像預處理
      • 3)特征提取
      • 4)角點檢測
      • 5)角點定位和標記
      • 6)角點篩選或后處理(可選)
      • 7)輸出結果
  • 二、Harris 角點檢測(經典方法)
    • 1、參數解釋
    • 2、圖片的讀取以及灰度轉換
    • 3、檢測角點,并對響應值進行閾值處理
  • 三、Shi-Tomasi 角點檢測(Good Features to Track)
    • 1、參數解釋
    • 2、代碼示例
  • 四、FAST 角點檢測(快速角點檢測)
    • 1、參數解釋
    • 2、代碼示例
  • 總結


一、角點檢測

1、定義

在計算機視覺中,角點檢測是識別圖像中局部區域(角點)的關鍵技術,這些區域通常是兩條或多條邊緣的交點,具有豐富的結構信息,常用于圖像匹配、跟蹤、三維重建等任務。

Harris角點檢測算法是一種常用的計算機視覺算法,用于檢測圖像中的角點。該算法通過計算圖像中每個像素的局部自相關矩陣,來判斷該像素是否為角點。
在這里插入圖片描述

2、檢測流程

1)輸入圖像

將待檢測的圖像作為輸入。

2)圖像預處理

對輸入圖像進行必要的預處理,如灰度化、降噪等,以便更好地進行角點檢測。

3)特征提取

使用角點檢測算法對預處理后的圖像進行角點特征提取。常見的角點檢測算法有Harris角點檢測算法、Shi-Tomasi角點檢測算法等。

4)角點檢測

根據所選的角點檢測算法,計算圖像中的每個像素點的角點響應值,以判斷其是否為角點。具體算法會根據不同的方法而有所差異。

5)角點定位和標記

根據角點響應值,確定角點的位置,并進行標記。可以使用函數或算法來繪制或返回角點的位置信息。

6)角點篩選或后處理(可選)

根據具體需求,可以對檢測到的角點進行篩選或進行后處理操作,如非極大值抑制、閾值過濾等,以去除不準確的角點或增強有效的角點。

7)輸出結果

根據需要,可以將檢測到的角點的位置信息、圖像中繪制的標記或其他相關信息作為輸出結果。

二、Harris 角點檢測(經典方法)

1、參數解釋

角點指圖像中局部區域與周圍區域有較大灰度變化的點或像素。
cornerHarris(img, blockSize, ksize, k[, dst[, borderType]]) -> dst? img:單通道灰度圖像(數據類型為 float32)。? blockSize: 計算角點時考慮的鄰域大小(如 2 表示 2x2 鄰域)。? ksize:Sobel 梯度計算的核大小(常用 3)。? k: 響應函數中的參數,影響角點檢測的敏感度(k 越小,檢測到的角點越多)。,取值參數為 [0.04,0.06]。dst:返回numpy.ndarray對象,大小和src相同,值越大,對應像素點是角的概率越高

2、圖片的讀取以及灰度轉換

img = cv2.imread('huanghelou.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

3、檢測角點,并對響應值進行閾值處理

dst = cv2.cornerHarris(gray,4,3,0.04)
# 標記檢測到的角點
img[dst > 0.01 * dst.max()] = [0, 255, 0]
# 這里通過對角點響應進行閾值處理,標記出檢測到的角點。
# 0.05 * dst.max() 是一個閾值,大于這個值的像素點會被標記為綠色。
cv2.imshow('img',img)
cv2.waitKey(0)

在這里插入圖片描述

三、Shi-Tomasi 角點檢測(Good Features to Track)

1、參數解釋

corners = cv2.goodFeaturesToTrack(gray_img, maxCorners, qualityLevel, minDistance)
參數:
maxCorners:最多檢測的角點數量(若角點數量超過,按響應值降序篩選)。
qualityLevel:角點質量閾值(0~1,值越小保留的角點越多,通常取 0.01~0.1)。
minDistance:角點之間的最小像素距離(避免密集角點)。
輸出:角點坐標數組(形狀為 (N, 1, 2),N 為角點數量)。

2、代碼示例

import cv2
import numpy as npimg = cv2.imread('building.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Shi-Tomasi角點檢測
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
corners = np.int0(corners)  # 轉換為整數坐標# 繪制角點
for corner in corners:x, y = corner.ravel()cv2.circle(img, (x, y), 3, (0, 255, 0), -1)  # 綠色圓點標記cv2.imshow('Shi-Tomasi Corners', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這里插入圖片描述

四、FAST 角點檢測(快速角點檢測)

1、參數解釋

fast = cv2.FastFeatureDetector_create(threshold=10, nonmaxSuppression=True)
corners = fast.detect(gray_img, None)
參數:
threshold:灰度差異閾值(值越小,檢測到的角點越多)。
nonmaxSuppression:是否啟用非極大值抑制(建議設為 True,避免密集角點)。
輸出:KeyPoint 對象列表,包含角點坐標、大小等信息。

2、代碼示例

import cv2img = cv2.imread('fast_corner.jpg', cv2.IMREAD_GRAYSCALE)# 創建FAST檢測器
fast = cv2.FastFeatureDetector_create(threshold=10, nonmaxSuppression=True)# 檢測角點
corners = fast.detect(img, None)# 繪制角點
img_color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cv2.drawKeypoints(img_color, corners, img_color, color=(0, 255, 0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)cv2.imshow('FAST Corners', img_color)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這里插入圖片描述


總結

角點檢測是計算機視覺中的一種特征檢測方法,用于尋找圖像中的角點或者具有角點特征的圖像區域。角點是指圖像中突然改變方向的點,即在其周圍的不同方向上都有較大的灰度變化。角點具有一些特殊性質,如旋轉不變性、尺度不變性和光照不變性等,因此在圖像處理和計算機視覺中具有廣泛的應用。

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

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

相關文章

江蘇正力新能Verify認知能力測評筆試已通知 | SHL測評題庫預測題 | 華東同舟求職講求職

江蘇正力新能入職筆試通知,Verify(認知能力測評),用時約46分鐘,其中正式測試部分計時36分鐘;時間到了試卷會自動提交,請合理安排答題時間!前面有10分鐘練習時間,可以略過…

在若依里創建新菜單

首先打開左側菜單欄的系統管理,然后點擊菜單管理 可以點擊左上角的新增,也可以點擊右側對應目錄的新增 這里我選擇了右側的新增,即在系統管理目錄下新增菜單 其中的組件路徑就是寫好的頁面的路徑 (從views的下一級開始寫即可&…

【AI知識庫云研發部署】RAGFlow + DeepSeek

可以分成兩臺機器部署,一臺gpu,一臺cpu,cpu的機器運行ragflow的主程序,使用模型時才訪問gpu。當然全部在一臺機器上部署是完全ok的。全文沒有復雜的環境問題 gpu 安裝screen:yum install screen 配置ollama: 下載官方安裝腳本并執行: curl -fsSL https://ollama.co…

Java后端開發day40--異常File

(以下內容全部來自上述課程) 異常 異常:異常就是代表程序出現的問題 1. 異常的分類 1.1 Error 代表的是系統級別的錯誤(屬于嚴重問題) 系統一旦出現問題,sun公司會把這些錯誤封裝成Error對象。 Error…

算法思想之深度優先搜索(DFS)、遞歸以及案例(最多能得到多少克黃金、精準核酸檢測、最富裕的小家庭)

深度優先搜索(DFS)、遞歸 深度優先搜索(Depth First Search,DFS)是一種用于遍歷或搜索樹或圖的算法。在 DFS 算法中,從起始節點開始,沿著一條路徑盡可能深地訪問節點,直到到達葉子節…

Spark,HDFS客戶端操作

hadoop客戶端環境準備 找到資料包路徑下的Windows依賴文件夾,拷貝hadoop-3.1.0到非中文路徑(比如d:\hadoop-3.1.0) ① 打開環境變量 ② 在下方系統變量中新建HADOOP_HOME環境變量,值就是保存hadoop的目錄。 效果如下: ③ 配置Pa…

共享會議室|物聯網解決方案:打造高效、智能的會議空間!

在數字化轉型的浪潮下,企業、園區、公共機構的會議室面臨諸多痛點,如何通過物聯網技術實現會議室資源的智能調度、環境設備的自動化控制以及用戶體驗的全面升級?本文將結合行業實踐與技術方案,探討基于物聯網的共享會議室解決方案…

ts bug 找不到模塊或相應類型的聲明,@符有紅色波浪線

解決方法&#xff1a;在env.d.ts文件中添加以下代碼&#xff0c;這段代碼是一個 TypeScript 的聲明文件&#xff0c;用于讓 TypeScript 知道如何處理 Vue 單文件組件&#xff08;.vue 文件&#xff09;的導入。 /// <reference types"vite/client" /> // 聲明…

端口隔離基本配置

1.top圖 2.交換機配置 # sysname sw1 # vlan batch 10 # interface GigabitEthernet0/0/1port link-type trunkport trunk allow-pass vlan 10 # interface GigabitEthernet0/0/2port link-type trunkport trunk allow-pass vlan 10sys sw2 # vlan batch 10 # interface Giga…

Android View#post()源碼分析

文章目錄 Android View#post()源碼分析概述onCreate和onResume不能獲取View的寬高post可以獲取View的寬高總結 Android View#post()源碼分析 概述 在 Activity 中&#xff0c;在 onCreate() 和 onResume() 中是無法獲取 View 的寬高&#xff0c;可以通過 View#post() 獲取 Vi…

SecureCrt設置顯示區域橫列數

1. Logical rows //邏輯行調顯示區域高度的 一般超過50就全屏了 2. Logical columns //邏輯列調顯示區域寬度的 3. Scrollback buffer //緩沖區大小

最短路徑-Dijkstra算法板子(java)

自己把Dijkstra的板子整理了一下&#xff0c;也方便自己后續做題&#xff0c;在此做個記錄。 Dijkstra基本上都會需要這些變量&#xff1a; dist[]&#xff1a;記錄各個節點到起始節點的最短權值 path[]&#xff1a;記錄各個節點的上一個節點(用來聯系該節點到起始節點的路徑)…

PostgreSQL數據庫的array類型

PostgreSQL數據庫相比其它數據庫&#xff0c;有很多獨有的字段類型。 比如array類型&#xff0c;以下表的pay_by_quarter與schedule兩個字段便是array類型&#xff0c;即數組類型。 CREATE TABLE sal_emp (name text,pay_by_quarter integer[],schedule t…

centos的根目錄占了大量空間怎么辦

問題 當根目錄磁盤不夠時&#xff0c;就必須刪除無用的文件了 上面的&#xff0c;如果刪除/usr 或/var是可以釋放出系統盤的 定位占空間大的文件 經過命令&#xff0c;一層層查哪些是占磁盤的。 du -sh /* | sort -rh | head -n 10 最終排查&#xff0c;是有個系統日志占了20…

PostgreSQL存儲過程“多態“實現:同一方法名支持不同參數

引言 在傳統編程語言中&#xff0c;方法重載&#xff08;同一方法名不同參數&#xff09;是實現多態的重要手段。但當我們將目光轉向PostgreSQL數據庫時&#xff0c;是否也能在存儲過程&#xff08;函數&#xff09;中實現類似的功能&#xff1f;本文將深入探討PostgreSQL中如…

快速學會Linux的WEB服務

一.用戶常用關于WEB的信息 什么是WWW www是world wide web的縮寫&#xff0c;及萬維網&#xff0c;也就是全球信息廣播的意思 通常說的上網就是使用www來查詢用戶所需要的信息。 www可以結合文字、圖形、影像以及聲音等多媒體&#xff0c;超鏈接的方式將信息以Internet傳遞到世…

Windows玩游戲的時候,一按字符鍵就顯示桌面

最近打賽伯朋克 2077 的時候&#xff0c;不小心按錯鍵了&#xff0c;導致一按字符鍵就顯示桌面。如下&#xff1a; 一開始我以為是輸入法的問題&#xff08;相信打游戲的人都知道輸入法和奔跑鍵沖突的時候有多煩&#xff09;&#xff0c;但是后來解決半天發現并不是。在網上搜…

【測試開發】概念篇 - 從理解需求到認識常見開發、測試模型

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

核函數(Kernel function)

核函數 核函數在GPU上進行并行執行 注意: 限定詞__global__修飾 [雙下劃線]返回值必須是void 形式: _global_ void kernel_function( argument arg){ ? printf(“hello world from the GPU\n”); } void __global__kernel_function( argument arg){ ? printf(“hello worl…

數據結構與算法:區間dp

前言 區間dp也是動態規劃里很重要的一部分。 一、內容 區間dp的根本原理就是把大范圍問題分解成若干小范圍的問題去求解。一般來講,常見的用法有對于兩側端點去展開可能性和對于范圍上的劃分點去展開可能性。 二、題目 1.讓字符串成為回文串的最少插入次數 class Soluti…