OpenCV圖像拼接(4)圖像拼接模塊的一個匹配器類cv::detail::BestOf2NearestRangeMatcher

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

cv::detail::BestOf2NearestRangeMatcher 是 OpenCV 庫中用于圖像拼接模塊的一個匹配器類,專門用于尋找兩幅圖像之間的最佳特征點匹配。它是基于“最近鄰與次近鄰距離比”原則來過濾匹配點對的,以提高匹配結果的準確性。這個類特別適用于需要在多張圖片之間進行特征匹配和篩選的應用場景,比如全景圖拼接。

主要特點

  • 基于范圍的匹配:此匹配器不僅考慮兩張圖片之間的直接匹配,還會考慮一個范圍內其他圖片間的匹配關系,這對于全景圖像拼接等任務非常有用。
  • 最近鄰與次近鄰距離比測試:通過比較每個特征點與其最近和次近鄰居的距離比值來決定是否接受該匹配,這是一種常用的減少誤匹配的技術。

以下是該類的一些成員函數和變量的介紹:

構造函數

BestOf2NearestRangeMatcher(bool try_use_gpu = false, float match_conf = 0.3f, int num_matches_thresh1 = 6, int num_matches_thresh2 = 6, int range_width = -1);

  • try_use_gpu: 是否嘗試使用 GPU 進行加速。
  • match_conf: 匹配置信度閾值,用來過濾不可靠的匹配對。
  • num_matches_thresh1: 第一個匹配數量閾值,低于此值將不會計算單應性矩陣。
  • num_matches_thresh2: 第二個匹配數量閾值,低于此值將不會進行運動估計的細化。
  • range_width: 范圍寬度,用于限制匹配搜索的范圍,默認為 -1 表示沒有限制。

成員函數

  • void match(const ImageFeatures &features1, const ImageFeatures &features2, MatchesInfo &matches_info);
    執行兩幅圖像間的特征匹配,并填充 MatchesInfo 結構體,包含匹配結果和可能的單應性變換矩陣。

  • void operator()(const std::vector &features, std::vector &pairwise_matches, const UMat &mask);
    對一組圖像執行特征匹配,生成所有圖像對之間的匹配信息。

其他成員

  • impl_: 實現細節指針,指向具體的匹配器實現(可能是基于 CPU 或者 GPU)。
  • is_thread_safe_: 標識是否線程安全。
  • num_matches_thresh1_, num_matches_thresh2_: 上述構造函數參數中的兩個匹配數量閾值。
  • range_width_: 上述構造函數參數中的范圍寬度。

代碼示例

#include <opencv2/opencv.hpp>
#include <opencv2/stitching/detail/matchers.hpp>using namespace cv;
using namespace cv::detail;int main()
{// 讀取兩幅待匹配的圖像Mat img1 = imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png" );Mat img2 = imread( "/media/dingxin/data/study/OpenCV/sources/images/stich2.png" );if ( img1.empty() || img2.empty() ){std::cerr << "無法讀取圖像文件" << std::endl;return -1;}// 初始化特征檢測器和描述符提取器 (這里以ORB為例)Ptr< Feature2D > detector = ORB::create( 500 );  // 提取500個關鍵點// 檢測特征點并計算描述符std::vector< KeyPoint > keypoints1, keypoints2;Mat descriptors1, descriptors2;detector->detectAndCompute( img1, noArray(), keypoints1, descriptors1 );detector->detectAndCompute( img2, noArray(), keypoints2, descriptors2 );// 特征匹配BFMatcher matcher( NORM_HAMMING );std::vector< DMatch > matches;matcher.match( descriptors1, descriptors2, matches );// 繪制匹配結果Mat img_matches;drawMatches( img1, keypoints1, img2, keypoints2, matches, img_matches );// 顯示匹配結果imshow( "Matches", img_matches );waitKey( 0 );return 0;
}

運行結果

在這里插入圖片描述

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

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

相關文章

【C#語言】C#中的同步與異步編程:原理、示例與最佳實踐

文章目錄 ?前言?一、同步編程&#xff1a;簡單但低效的線性執行&#x1f31f;代碼示例&#x1f31f;執行流程示意圖&#x1f31f;同步編程特點 ?二、異步編程&#xff1a;非阻塞的高效執行&#x1f31f;代碼示例&#x1f31f;執行流程示意圖&#x1f31f;異步編程核心機制&a…

el-input 不可編輯,但是點擊的時候出現彈窗/或其他操作面板,并且帶可清除按鈕

1.focus“getFocus”鼠標聚焦的時候寫個方法&#xff0c;彈窗起來 getFocus(){ this.定義的彈窗狀態字段 true;} 2.點擊確定的時候&#xff0c;數值賦值到el-input的輸入框,彈窗取消&#xff08;this.定義的彈段字端 false&#xff09; 3.但是會有個問題就是el-input 不可點…

事件響應計劃:網絡彈性的關鍵

網絡安全事件響應計劃不僅僅是技術上的需要&#xff0c;更是企業的當務之急。在網絡威脅比以往任何時候都更加復雜和頻繁的時代&#xff0c;了解并做好準備應對這些事件可能會決定是恢復還是災難。 以下是簡要分析&#xff1a; 網絡安全事件不僅僅是技術故障&#xff1b;它們…

正則表達式詳解(regular expression)

&#x1f4a1; 正則表達式&#xff08;Regular Expression, regex&#xff09;知識點總結 &#x1f4a1; 正則表達式是一種用于匹配字符串的模式&#xff0c;廣泛用于搜索、替換、驗證等操作。 &#x1f4cc; 正則表達式的主要作用 1?? 字符串匹配 &#x1f9d0; 檢查一個…

全球化2.0 | ZStack云計算系統工程師(ZCCE)國際認證培訓成功舉辦

近日&#xff0c;ZStack云計算系統工程師&#xff08;ZCCE&#xff09;國際認證培訓在上海成功舉辦。本次培訓采用 "線下 線上直播" 雙軌模式&#xff0c;同步開設中文與英文課程&#xff0c;吸引了來自中國、東南亞、獨聯體、北美、中東等多個國家和地區的近 90 名…

C++學習之nginx+fastDFS

目錄 1.知識點概述 2.fastcgi復習 3.文件上傳流程分析 4.文件下載流程和優化 5.在存儲節點上安裝nginx和fastdfs插件 6.mod-fdsf.com配置文件修改 7.解決nginx的worker無法啟動&#xff0c;拷貝配置文件操作 8.客戶 通過瀏覽器訪問存儲節點404問題 9.nginx服務器處理資…

【AIGC】Win10系統極速部署Docker+Ragflow+Dify

【AIGC】WIN10僅3步部署DockerRagflowDify 一、 Docker快速部署1.F2進入bios界面&#xff0c;按F7設置開啟VMX虛擬化技術。保存并退出。2.打開控制面板配置開啟服務3.到官網下載docker安裝包&#xff0c;一鍵安裝&#xff08;全部默認勾選&#xff09; 二、 RagFlow快速部署1.確…

token升級(考慮在分布式環境中布置token,結合session保證請求調用過程中token不會過期。)

思路&#xff1a; 首先&#xff0c;用戶的需求是確保使用同一個Token的外部調用都在一個Session中處理。 需要考慮Token與Session綁定、安全措施、Session管理、分布式處理等。 使用Redis作為Session存儲&#xff0c; 在Java中 通過Spring Data Redis或Lettuce庫實現。 2.生成…

新一代電子數據取證專家 | 蘇州龍信信息科技有限公司

本文關鍵詞&#xff1a;電子取證、手機取證、計算機取證、云取證 關于我們About us 蘇州龍信信息科技有限公司專注于電子數據取證、大數據、信息安全等領域&#xff0c;核心業務主要涵蓋取證工具研發、大數據融合分析、案件技術支持、取證能力培訓等&#xff0c;先后為執法部門…

研究生研究方向系統基于springboot SSM

目錄 摘要 一、系統背景與目的 二、開發流程 三、系統架構與技術選型 四、功能分析 4.1 用戶角色與權限管理 4.2研究方向管理功能 4.3學習資源管理功能 4.4科研項目跟蹤功能 4.5學術交流與分享功能 4.6導師指導與評估功能 摘要 基于Spring Boot的研究生研究方向系統…

[解決] PDF轉圖片,中文亂碼或顯示方框的解決方案

在Java開發中,將PDF文件轉換為圖片是一項常見的需求,但過程中可能會遇到中文亂碼或顯示方框的問題。本文將深入探討這一問題,并提供詳細的解決方案,幫助開發者順利地完成PDF到圖片的轉換。 一、問題現象 在使用Java庫(如Apache PDFBox)將PDF轉換為圖片時,如果PDF文件中…

「JavaScript深入」WebSocket:高效的雙向實時通信技術

WebSocket WebSocket 的特點1. 全雙工通信2. 持久連接3. 低延遲4. 二進制和文本支持5. 連接管理6. 二進制數據傳輸 WebSocket 協議詳解1. 握手過程2. 數據幀結構 WebSocket 的實現服務器端實現&#xff08;Node.js ws庫&#xff09;1. 基礎服務器2. 廣播功能實現3. 心跳機制客…

ABAP 長文本編輯器

加個屏幕 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------…

postman小白教程(從入門到實戰,詳細教學)

目錄 1. postman介紹 2. 下載地址 3. 安裝流程 4. 注冊postman賬號 ① 打開postman&#xff0c;點擊【創建賬號】或【登錄】&#xff0c;會跳轉到瀏覽器 ② 若已有賬號可以直接登錄&#xff1b;若無賬號&#xff0c;則創建新賬號 ③ 若登錄成功會彈出提示框&#xff0c;…

Qt 實現波浪填充的圓形進度顯示

話不多說&#xff0c;先上效果圖 代碼示例&#xff1a; #include <QApplication> #include <QWidget> #include <QPainter> #include <QPropertyAnimation> #include <QTimer> #include <cmath>class WaveProgressBar : public QWidget {…

Linux vim mode | raw / cooked

注&#xff1a;機翻&#xff0c;未校。 vim terminal “raw” mode Vim 終端 “raw” 模式 1. 原始模式與已處理模式的區別 We know vim puts the terminal in “raw” mode where it receives keystrokes as they are typed, opposed to “cooked” mode where the command…

docker部署dify

1.安裝docker 參考鏈接 https://ascendking.blog.csdn.net/article/details/136407383 設置docker源 vim /etc/docker/daemon.json {"registry-mirrors": ["https://docker.registry.cyou", "https://docker-cf.registry.cyou", "http…

Python Seaborn面試題及參考答案

目錄 如何用 stripplot () 繪制帶隨機偏移的分類散點圖?如何控制 jitter 參數? swarmplot () 如何避免散點重疊?適用場景與數據量限制是什么? 使用 catplot () 繪制箱線圖時,如何通過 kind 參數切換圖表類型? 如何通過 hue 參數在分類圖中添加第三個維度(如性別)? …

Linux應用:Linux的信號

什么是信號 信號是一種軟件中斷&#xff0c;用于通知進程系統中發生了某種特定事件。它是操作系統與進程之間&#xff0c;以及進程與進程之間進行異步通信的一種方式。在 Linux 系統中&#xff0c;信號是一種比較簡單的進程間通信機制。當一個信號產生時&#xff0c;內核會通過…

實時監控、數據分析!Web-Check構建你的網站健康檢測系統實操方案

文章目錄 前言1.關于Web-Check2.功能特點3.安裝Docker4.創建并啟動Web-Check容器5.本地訪問測試6.公網遠程訪問本地Web-Check7.內網穿透工具安裝8.創建遠程連接公網地址9.使用固定公網地址遠程訪問 前言 在數字化運維領域&#xff0c;網站穩定性保障始終是開發者和運維團隊的核…