RootSIFT的目標定位,opencvsharp。

首先截取匹配模板,然后使用rootsift特征匹配,最后定位目標。

對于微弱變化,還是能夠識別定位的,對于傳統算法來說已經不錯了。

目標定位效果:

?使用的模板圖片。

using OpenCvSharp;
using OpenCvSharp.Features2D;using Point = OpenCvSharp.Point;namespace WinFormsApp8
{public partial class Form1 : Form{public Form1(){InitializeComponent();}// 轉換為RootSIFT描述子static void ConvertToRootSIFT(Mat descriptors){// L1歸一化for (int i = 0; i < descriptors.Rows; i++){var row = descriptors.Row(i);double sum = Cv2.Norm(row, NormTypes.L1);row /= sum;}// 平方根處理Cv2.Sqrt(descriptors, descriptors);}// 特征匹配static List<DMatch> MatchFeatures(Mat queryDescriptors, Mat sceneDescriptors){var matcher = new BFMatcher(NormTypes.L2);var matches = matcher.KnnMatch(queryDescriptors, sceneDescriptors, 2);// 應用比率測試var goodMatches = new List<DMatch>();foreach (var match in matches){if (match[0].Distance < 0.75 * match[1].Distance){goodMatches.Add(match[0]);}}return goodMatches;}// 繪制結果static void DrawResult(Mat image, RotatedRect rect){// 繪制旋轉矩形Point2f[] vertices = rect.Points();for (int i = 0; i < 4; i++){Cv2.Line(image, (Point)vertices[i], (Point)vertices[(i + 1) % 4],new Scalar(0, 255, 0), 3);}// 繪制矩形中心Cv2.Circle(image, (Point)rect.Center, 5, new Scalar(0, 0, 255), -1);}private void button1_Click(object sender, EventArgs e){try{Mat queryImage = Cv2.ImRead("2.bmp", ImreadModes.Color);using var queryGray = new Mat();Cv2.CvtColor(queryImage, queryGray, ColorConversionCodes.BGR2GRAY);using var sceneImage = new Mat(Environment.CurrentDirectory + "\\s.bmp", ImreadModes.Color);if (queryImage.Empty() || sceneImage.Empty()){Console.WriteLine("無法加載圖像!");return;}// 轉換為灰度圖using var sceneGray = new Mat();Cv2.CvtColor(sceneImage, sceneGray, ColorConversionCodes.BGR2GRAY);// 初始化SIFT檢測器var sift = SIFT.Create();// 檢測關鍵點和計算描述子KeyPoint[] queryKeypoints, sceneKeypoints;Mat queryDescriptors = new Mat(), sceneDescriptors = new Mat();sift.DetectAndCompute(queryGray, null, out queryKeypoints, queryDescriptors);sift.DetectAndCompute(sceneGray, null, out sceneKeypoints, sceneDescriptors);// 轉換為RootSIFT描述子ConvertToRootSIFT(queryDescriptors);ConvertToRootSIFT(sceneDescriptors);// 特征匹配var matches = MatchFeatures(queryDescriptors, sceneDescriptors);// 獲取匹配點對var queryPoints = matches.Select(m => queryKeypoints[m.QueryIdx].Pt).ToArray();var scenePoints = matches.Select(m => sceneKeypoints[m.TrainIdx].Pt).ToArray();if (queryPoints.Length >= 8 && scenePoints.Length >= 8)//這里數字可以改{// 計算單應性矩陣var homography = Cv2.FindHomography(InputArray.Create(queryPoints),InputArray.Create(scenePoints),HomographyMethods.Ransac, 5.0);// 獲取查詢圖像的四個角點var queryCorners = new Point2f[]{new Point2f(0, 0),new Point2f(queryImage.Cols, 0),new Point2f(queryImage.Cols, queryImage.Rows),new Point2f(0, queryImage.Rows)};// 變換到場景圖像中var sceneCorners = Cv2.PerspectiveTransform(queryCorners, homography);// 計算最小外接矩形var minRect = Cv2.MinAreaRect(sceneCorners);// 繪制結果DrawResult(sceneImage, minRect);// 顯示結果// 轉換為軸對齊矩形// Rect boundingRect = Cv2.BoundingRect(minRect.Points().Select(p => new Point((int)p.X, (int)p.Y)).ToArray());Cv2.ImShow("pic", sceneImage);Cv2.WaitKey(0);}else{MessageBox.Show("沒有足夠的匹配點來計算變換矩陣");}}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

【免費】RootSIFT的目標定位,opencvsharp資源-CSDN文庫https://download.csdn.net/download/vokxchh/90968508

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

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

相關文章

Appium如何支持ios真機測試

ios模擬器上UI自動化測試 以appiumwebdriverio為例&#xff0c;詳細介紹如何在模擬器上安裝和測試app。在使用ios模擬器前&#xff0c;需要安裝xcode&#xff0c;創建和啟動一個simulator。simulator創建好后&#xff0c;就可以使用xcrun simctl命令安裝被測應用并開始測試了。…

近幾年字節飛書測開部分面試題整理

文章目錄 一、面試問題1. 創建索引2. 攔截器&#xff08;Interceptor&#xff09;和過濾器&#xff08;Filter&#xff09;的區別3. 為什么jwt令牌代替session&#xff1f;4. 有一個100行的數據&#xff0c;和一個1萬行的數據&#xff0c;寫sql 的時候要注意什么&#xff1f;5.…

JDBC基礎關鍵_001_認識

目 錄 一、概述 二、原理 三、接口的作用 四、JDBC 模擬 1.JDBC 接口 2.驅動 3.配置文件 4.調用者 一、概述 JDBC&#xff08;Java DataBase Connectivity&#xff09;&#xff0c;Java 數據庫連接&#xff1b;是用 Java 語言操作數據庫&#xff0c;使用 Java 語言向數…

SWAN(Scade One) 語言原理介紹

SCADE 團隊于2024年推出了下一代 SCADE 工具 Scade One&#xff0c;工具的建模語言也基于Scade 6 進行了演化。在語言命名方面&#xff0c;并沒有復用"Scade"這一標志性的名稱&#xff0c;而是使用了新的名字&#xff1a;Swan。在本篇中&#xff0c;將敘述 Swan 語言…

【工具教程】多個條形碼識別用條碼內容對圖片重命名,批量PDF條形碼識別后用條碼內容批量改名,使用教程及注意事項

一、條形碼識別改名使用教程 打開軟件并選擇處理模式&#xff1a;打開軟件后&#xff0c;根據要處理的文件類型&#xff0c;選擇 “圖片識別模式” 或 “PDF 識別模式”。如果是處理包含條形碼的 PDF 文件&#xff0c;就選擇 “PDF 識別模式”&#xff1b;若是處理圖片文件&…

sql中group by使用場景

GROUP BY語句在SQL中用于將多個記錄分組為較小的記錄集合&#xff0c;以便對每個組執行聚合函數&#xff0c;如COUNT(), MAX(), MIN(), SUM(), AVG()等。GROUP BY的使用場景非常廣泛&#xff0c;以下是一些典型的應用場景&#xff1a; 統計數量 當你想要計算某個字段的唯一值數…

MongoDB慢查詢臨時開啟方法講解

1、首先連接數據庫 mongosh "mongodb://localhost:27017" 2、選擇目標數據庫 show databases;#顯示所有數據庫 use lidb;#使用某數據庫 3、查看當前分析級別 db.getProfilingStatus() 輸出 { was: 0, slowms: 100, sampleRate: 1, ok: 1 } #was0表示關閉&…

UML活動圖與泳道圖

活動圖的作用&#xff0c;與用例圖類似&#xff0c;也是幫助我們捕獲用戶的需求。 活動圖主要是用來描述用戶的業務流程&#xff0c;如果能把用戶的這個業務流程描述的很清楚的話&#xff0c;就可以幫助我們做用例分析。 1 活動圖定義 活動圖描述了在一個過程中&#xff0c;…

算法練習-回溯

今天給大家帶來的是在dfs查用的降低復雜度的方法---剪枝 所謂減枝 第一題 代碼部分&#xff1a;&#xff08;未剪枝&#xff09; 代碼部分&#xff08;剪枝&#xff09; 第二題 代碼部分&#xff08;未剪枝&#xff09; 剪枝后 通過這些題目可以看出如果沒有進行剪枝操作&#…

Elasticsearch + Milvus 構建高效知識庫問答系統《一》

&#x1f50d; Elasticsearch Milvus 構建高效知識庫問答系統&#xff08;RAG 技術實戰&#xff09; &#x1f4cc; 目錄 背景介紹Elasticsearch 在知識庫檢索中的作用Milvus 在知識庫檢索中的作用混合檢索&#xff1a;Elasticsearch Milvus完整代碼實現部署建議與優化方向…

10萬QPS高并發請求,如何防止重復下單

1. 前端攔截 首先因為是10萬QPS的高并發請求&#xff0c;我們要保護好系統&#xff0c;那就是盡可能減少用戶無效請求。 1.1 按鈕置灰 很多用戶搶票、搶購、搶紅包等時候&#xff0c;為了提高搶中的概率&#xff0c;都是瘋狂點擊按鈕。會觸發多次請求&#xff0c;導致重復下…

基于單片機的病房呼叫系統(源碼+仿真)

該系統由以 STM32F4 為平臺的監控終端以及以 CC2530 為平臺的無線傳感網組成。系統上電后自動完成 ZigBee 網絡的組建、終端節點的加入&#xff0c;病人可利用便攜式的病人終端發出呼叫求助請求信息、節點在線信息以及對護士的服務評價信息等&#xff0c;這些信息通過路由節點發…

使用WebSocket實時獲取印度股票數據源(無調用次數限制)實戰

使用WebSocket實時獲取印度股票數據源&#xff08;無調用次數限制&#xff09;實戰 一、前置準備 1. 獲取API密鑰 登錄 StockTV開發者平臺 → 聯系客服獲取測試Key&#xff08;格式MY4b781f618e3f43c4b055f25fa61941ad&#xff09;&#xff0c;該密鑰無調用次數限制且支持實時…

kafka消息積壓排查

kafka監控搭建&#xff1a;https://insights.blog.csdn.net/article/details/139129552?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7EPaidSort-1-139129552-blog-132216491.235%5Ev43%5Econtrol…

Matlab回歸預測大合集又更新啦!新增2種高斯過程回歸預測模型,已更新41個模型!性價比拉滿!

Matlab回歸預測大合集又更新啦&#xff01;新增2種高斯過程回歸預測模型&#xff0c;已更新41個模型&#xff01;性價比拉滿&#xff01; 目錄 Matlab回歸預測大合集又更新啦&#xff01;新增2種高斯過程回歸預測模型&#xff0c;已更新41個模型&#xff01;性價比拉滿&#xf…

6套bootstrap后臺管理界面源碼

后端管理系統是指一種用于管理和監控網站、應用程序或系統的后臺管理界面。它通常由一組后端代碼和數據庫組成&#xff0c;用于處理和存儲數據&#xff0c;提供給前端用戶界面展示和操作數據。 后端管理系統的功能和特點可以包括&#xff1a; 用戶權限管理&#xff1a;可以設…

JavaScript性能優化實戰:從核心原理到工程實踐的全流程解析

下面我給出一個較為系統和深入的解析&#xff0c;幫助你理解和實踐“JavaScript 性能優化實戰&#xff1a;從核心原理到工程實踐的全流程解析”。下面的內容不僅解釋了底層原理&#xff0c;也結合實際工程中的最佳模式和工具&#xff0c;幫助你在項目中貫徹性能優化理念&#x…

ELK日志管理框架介紹

在小鈴鐺的畢業設計中涉及到了ELK日志管理框架&#xff0c;在調研期間發現在中文中沒有很好的對ELK框架進行介紹的文章&#xff0c;因此擬在本文中進行較為詳細的實現的介紹。 理論知識 ELK 框架介紹 ELK 是一個流行的開源日志管理解決方案堆棧&#xff0c;由三個核心組件組…

2025.6.4總結

工作&#xff1a;今天效率比較高&#xff0c;早上回歸4個問題&#xff0c;下午找了3個bug&#xff0c;晚上二刷了科目一&#xff08;貪吃蛇系統&#xff09;&#xff0c;寫了四個點&#xff0c;唯一沒達標的就是兩自動化沒完成。美中不足的是電腦上下載不了PC版的番茄工作軟件。…

【vue3學習】vue3入門

目錄 1、vue2選項式API 2、Vue3 組合式 API &#xff08;1&#xff09;setup 函數? 基本實現?編輯 補充方法 setup語法糖 &#xff08;2&#xff09;響應式數據? ref reactive&#xff1a; 大家好啊&#xff0c;我是jstart千語。好久沒更新咯&#xff0c;因為最近一…