suchen
HeimDatenbankMySQL-TutorialOpenCV中feature2D学习SIFT和SURF算子实现特征点提取与匹配

概述 之前的文章SURF和SIFT算子实现特征点检测简单地讲了利用SIFT和SURF算子检测特征点,在检测的基础上可以使用SIFT和SURF算子对特征点进行特征提取并使用匹配函数进行特征点的匹配。具体实现是首先采用SurfFeatureDetector检测特征点,再使用SurfDescripto

概述

      之前的文章SURF和SIFT算子实现特征点检测简单地讲了利用SIFT和SURF算子检测特征点,在检测的基础上可以使用SIFT和SURF算子对特征点进行特征提取并使用匹配函数进行特征点的匹配。具体实现是首先采用SurfFeatureDetector检测特征点,再使用SurfDescriptorExtractor计算特征点的特征向量,最后采用BruteForceMatcher暴力匹配法或者FlannBasedMatcher选择性匹配法(二者的不同)来进行特征点匹配。

      实验所用环境是opencv2.4.0+vs2008+win7,需要注意opencv2.4.X版本中SurfFeatureDetector是包含在opencv2/nonfree/features2d.hpp中,BruteForceMatcher是包含在opencv2/legacy/legacy.hpp中,FlannBasedMatcher是包含在opencv2/features2d/features2d.hpp中。

BruteForce匹配法

首先使用BruteForceMatcher暴力匹配法,代码如下:

/**
* @采用SURF算子检测特征点,对特征点进行特征提取,并使用BruteForce匹配法进行特征点的匹配
* @SurfFeatureDetector + SurfDescriptorExtractor + BruteForceMatcher
* @author holybin
*/

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/nonfree/features2d.hpp"	//SurfFeatureDetector实际在该头文件中
#include "opencv2/legacy/legacy.hpp"	//BruteForceMatcher实际在该头文件中
//#include "opencv2/features2d/features2d.hpp"	//FlannBasedMatcher实际在该头文件中
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
	Mat src_1 = imread( "D:\\opencv_pic\\cat3d120.jpg", CV_LOAD_IMAGE_GRAYSCALE );
	Mat src_2 = imread( "D:\\opencv_pic\\cat0.jpg", CV_LOAD_IMAGE_GRAYSCALE );

	if( !src_1.data || !src_2.data )
	{ 
		cout keypoints_1, keypoints_2;
	detector.detect( src_1, keypoints_1 );
	detector.detect( src_2, keypoints_2 );
	cout > matcher;
	vector matches;
	matcher.match( descriptors_1, descriptors_2, matches );
	cout<br>

<p>实验结果:</p>
<img  src="/static/imghwm/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20141115151204375%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG9seWJpbg%3D%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fu012564690%2Farticle%2Fdetails%2F17370511" class="lazy" alt="OpenCV中feature2D学习SIFT和SURF算子实现特征点提取与匹配" ><br>
<p><span><br>
</span></p>

<h1 id="span-FLANN匹配法-span"><span>FLANN匹配法</span></h1>

<p>使用暴力匹配的结果不怎么好,下面使用FlannBasedMatcher进行特征匹配,只保留好的特征匹配点,代码如下:</p>

<pre class="brush:php;toolbar:false">/**
* @采用SURF算子检测特征点,对特征点进行特征提取,并使用FLANN匹配法进行特征点的匹配
* @SurfFeatureDetector + SurfDescriptorExtractor + FlannBasedMatcher
* @author holybin
*/

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/nonfree/features2d.hpp"	//SurfFeatureDetector实际在该头文件中
//#include "opencv2/legacy/legacy.hpp"	//BruteForceMatcher实际在该头文件中
#include "opencv2/features2d/features2d.hpp"	//FlannBasedMatcher实际在该头文件中
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
	Mat src_1 = imread( "D:\\opencv_pic\\cat3d120.jpg", CV_LOAD_IMAGE_GRAYSCALE );
	Mat src_2 = imread( "D:\\opencv_pic\\cat0.jpg", CV_LOAD_IMAGE_GRAYSCALE );

	if( !src_1.data || !src_2.data )
	{ 
		cout keypoints_1, keypoints_2;
	detector.detect( src_1, keypoints_1 );
	detector.detect( src_2, keypoints_2 );
	cout allMatches;
	matcher.match( descriptors_1, descriptors_2, allMatches );
	cout maxDist )
			maxDist = dist;
	}
	printf("	max dist : %f \n", maxDist );
	printf("	min dist : %f \n", minDist );

	//-- 过滤匹配点,保留好的匹配点(这里采用的标准:distance goodMatches;
	for( int i = 0; i (), 
		DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS //不显示未匹配的点
		); 
	imshow("matching result", matchImg );
	//-- 输出匹配点的对应关系
	for( int i = 0; i <br>

<p>实验结果:</p>
<img  src="/static/imghwm/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20141115151359125%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG9seWJpbg%3D%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fu012564690%2Farticle%2Fdetails%2F17370511" class="lazy" alt="OpenCV中feature2D学习SIFT和SURF算子实现特征点提取与匹配" ><br>
<p><br>
</p>

<p>从第二个实验结果可以看出,经过过滤之后特征点数目从49减少到33,匹配的准确度有所上升。当然也可以使用SIFT算子进行上述两种匹配实验,只需要将SurfFeatureDetector换成SiftFeatureDetector,将SurfDescriptorExtractor换成SiftDescriptorExtractor即可。</p>
<p><br>
</p>
<h1 id="span-拓展-span"><span>拓展</span></h1>

<p>       在FLANN匹配法的基础上,还可以进一步利用透视变换和空间映射找出已知物体(目标检测),具体来说就是利用findHomography函数利用匹配的关键点找出相应的变换,再利用perspectiveTransform函数映射点群。具体可以参考这篇文章:OpenCV中feature2D学习——SIFT和SURF算法实现目标检测。</p>
<p><br>
</p>


</iostream></stdio.h>
Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
MySQL: Wesentliche Fähigkeiten für Anfänger zu meisternMySQL: Wesentliche Fähigkeiten für Anfänger zu meisternApr 18, 2025 am 12:24 AM

MySQL ist für Anfänger geeignet, um Datenbankfähigkeiten zu erlernen. 1. Installieren Sie MySQL Server- und Client -Tools. 2. Verstehen Sie grundlegende SQL -Abfragen, wie z. B. SELECT. 3.. Stammdatenoperationen: Daten erstellen, Daten einfügen, aktualisieren und löschen. 4. Lernen Sie fortgeschrittene Fähigkeiten: Unterabfragen und Fensterfunktionen. 5. Debugging und Optimierung: Überprüfen Sie die Syntax, verwenden Sie Indizes, vermeiden Sie die Auswahl*und verwenden Sie die Grenze.

MySQL: Strukturierte Daten und relationale DatenbankenMySQL: Strukturierte Daten und relationale DatenbankenApr 18, 2025 am 12:22 AM

MySQL verwaltet strukturierte Daten effizient durch Tabellenstruktur und SQL-Abfrage und implementiert Inter-Tisch-Beziehungen durch Fremdschlüssel. 1. Definieren Sie beim Erstellen einer Tabelle das Datenformat und das Typ. 2. Verwenden Sie fremde Schlüssel, um Beziehungen zwischen Tabellen aufzubauen. 3.. Verbessern Sie die Leistung durch Indexierung und Abfrageoptimierung. 4. regelmäßig Sicherung und Überwachung von Datenbanken, um die Datensicherheit und die Leistungsoptimierung der Daten zu gewährleisten.

MySQL: Schlüsselmerkmale und Funktionen erklärtMySQL: Schlüsselmerkmale und Funktionen erklärtApr 18, 2025 am 12:17 AM

MySQL ist ein Open Source Relational Database Management -System, das in der Webentwicklung häufig verwendet wird. Zu den wichtigsten Funktionen gehören: 1. unterstützt mehrere Speichermotoren wie InnoDB und MyISAM, geeignet für verschiedene Szenarien; 2. Bietet Master-Slave-Replikationsfunktionen, um Lastausgleich und Datensicherung zu erleichtern. 3.. Verbessern Sie die Abfrageeffizienz durch Abfrageoptimierung und Index.

Der Zweck von SQL: Interaktion mit MySQL -DatenbankenDer Zweck von SQL: Interaktion mit MySQL -DatenbankenApr 18, 2025 am 12:12 AM

SQL wird verwendet, um mit der MySQL -Datenbank zu interagieren, um die Datenzusatz, Löschung, Änderung, Inspektion und Datenbankdesign zu realisieren. 1) SQL führt Datenoperationen über SELECT, INSERT, INTERATE, UPDATE, Löschen von Anweisungen durch. 2) Verwenden Sie Anweisungen für Datenbankdesign und -verwaltung create, ändern, fallen. 3) Komplexe Abfragen und Datenanalysen werden über SQL implementiert, um die Effizienz der Geschäftsentscheidungen zu verbessern.

MySQL für Anfänger: Erste Schritte mit der DatenbankverwaltungMySQL für Anfänger: Erste Schritte mit der DatenbankverwaltungApr 18, 2025 am 12:10 AM

Zu den grundlegenden Operationen von MySQL gehört das Erstellen von Datenbanken, Tabellen und die Verwendung von SQL zur Durchführung von CRUD -Operationen für Daten. 1. Erstellen Sie eine Datenbank: createdatabasemy_first_db; 2. Erstellen Sie eine Tabelle: CreateTableBooks (IDINGAUTO_INCRECTIONPRIMARYKEY, Titelvarchar (100) Notnull, AuthorVarchar (100) Notnull, veröffentlicht_yearint); 3.. Daten einfügen: InsertIntoBooks (Titel, Autor, veröffentlicht_year) va

MySQLs Rolle: Datenbanken in WebanwendungenMySQLs Rolle: Datenbanken in WebanwendungenApr 17, 2025 am 12:23 AM

Die Hauptaufgabe von MySQL in Webanwendungen besteht darin, Daten zu speichern und zu verwalten. 1.Mysql verarbeitet effizient Benutzerinformationen, Produktkataloge, Transaktionsunterlagen und andere Daten. 2. Durch die SQL -Abfrage können Entwickler Informationen aus der Datenbank extrahieren, um dynamische Inhalte zu generieren. 3.Mysql arbeitet basierend auf dem Client-Server-Modell, um eine akzeptable Abfragegeschwindigkeit sicherzustellen.

MySQL: Erstellen Sie Ihre erste DatenbankMySQL: Erstellen Sie Ihre erste DatenbankApr 17, 2025 am 12:22 AM

Zu den Schritten zum Erstellen einer MySQL -Datenbank gehören: 1. Erstellen einer Datenbank und Tabelle, 2. Daten einfügen, und 3. Durchführen von Abfragen. Verwenden Sie zunächst die Anweisungen für erstellte und creatEtable, um die Datenbank und Tabelle zu erstellen, und verwenden Sie dann die Anweisung InsertInto, um die Daten einzulegen, und verwenden Sie schließlich die Auswahlanweisung, um die Daten abzufragen.

MySQL: Ein anfängerfreundlicher Ansatz zur DatenspeicherungMySQL: Ein anfängerfreundlicher Ansatz zur DatenspeicherungApr 17, 2025 am 12:21 AM

MySQL ist für Anfänger geeignet, da es einfach zu bedienen und leistungsfähig ist. 1.Mysql ist eine relationale Datenbank und verwendet SQL für CRUD -Operationen. 2. Es ist einfach zu installieren und erfordert, dass das Stammbenutzerkennwort konfiguriert wird. 3.. Verwenden Sie Einfügen, Aktualisieren, Löschen und Wählen Sie, um Datenvorgänge auszuführen. 4. OrderBy, wo und Join kann für komplexe Abfragen verwendet werden. 5. Debugging erfordert die Überprüfung der Syntax und verwenden Sie Erklärungen zur Analyse der Abfrage. 6. Die Optimierungsvorschläge umfassen die Verwendung von Indizes, die Auswahl des richtigen Datentyps und der guten Programmiergewohnheiten.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools