Maison >Java >javaDidacticiel >Comment faire correspondre les points clés de deux images à l'aide de la bibliothèque Java OpenCV ?
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.
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.
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(); } }
Image1 -
Image2 -
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!