Maison  >  Article  >  Java  >  Comment faire correspondre les points clés de deux images à l'aide de la bibliothèque Java OpenCV ?

Comment faire correspondre les points clés de deux images à l'aide de la bibliothèque Java OpenCV ?

王林
王林avant
2023-09-08 09:21:01682parcourir

La méthode

detect()

de la classe org.opencv.features2d.Feature2D (abstract) détecte les points clés de l'image donnée. Pour cette méthode, vous devez passer un objet Mat représentant l'image source et un objet MatOfKeyPoint vide pour contenir les points clés lus.

drawMatches() de la classe org.opencv.features2d.Feature2D trouve des correspondances entre les points clés de deux images données et les dessine. Cette méthode accepte les paramètres suivants -

  • src1 - représentant la première image source d'objet de la classe Mat.

  • keypoints1 - Objet de classe MatOfKeyPoint, représentant les points clés de la première image source.

  • src2 - Objet de classe Mat représentant la deuxième image source.

  • keypoints2 - Objet de classe MatOfKeyPoint, représentant les points clés de la deuxième image source.

  • matches1to2 strong> - une correspondance de la première image à la deuxième image, ce qui signifie que keypoints1[i] a un point correspondant dans keypoints2[matches[i]] .

  • dst - un objet de la classe Mat représentant l'image cible.

Donc, faire correspondre les points clés de deux images -

  • Lisez les deux images sources en utilisant la méthode imread().

  • Obtenez les points clés de l'image et utilisez la méthode detect() pour dessiner deux images.

  • Utilisez la méthode drawMatches() pour trouver et dessiner des correspondances.

Exemple

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfDMatch;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.features2d.FastFeatureDetector;
import org.opencv.features2d.Features2d;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
public class MatchingKeypoints {
   public static void main(String args[]) throws Exception {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //Reading the source images
      String file1 ="D:\Images\feature1.jpg";
      Mat src1 = Imgcodecs.imread(file1);
      String file2 ="D:\Images\feature2.jpg";
      Mat src2 = Imgcodecs.imread(file2);
      //Creating an empty matrix to store the destination image
      Mat dst = new Mat();
      FastFeatureDetector detector = FastFeatureDetector.create();
      //Detecting the key points in both images
      MatOfKeyPoint keyPoints1 = new MatOfKeyPoint();
      detector.detect(src1, keyPoints1);
      MatOfKeyPoint keyPoints2 = new MatOfKeyPoint();
      detector.detect(src2, keyPoints2);
      MatOfDMatch matof1to2 = new MatOfDMatch();
      Features2d.drawMatches(src1, keyPoints1, src2, keyPoints2, matof1to2, dst);
      HighGui.imshow("Feature Matching", dst);
      HighGui.waitKey();
   }
}

Image d'entrée

Image1 -

如何使用OpenCV Java库匹配两个图像的关键点?

Image2 -

如何使用OpenCV Java库匹配两个图像的关键点?

sortie

如何使用OpenCV Java库匹配两个图像的关键点?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer