Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

OpenCV Java 라이브러리를 사용하여 두 이미지의 요점을 일치시키는 방법은 무엇입니까?


detect() org.opencv.features2d.Feature2D 메소드 (추상) 클래스는 주어진 이미지의 핵심 포인트를 감지합니다. 이 방법을 사용하려면 Mat 소스 이미지와 빈 MatOfKeyPoint 를 나타내는 개체 읽기 키 포인트를 유지하는 개체입니다.

drawMatches() org.opencv.features2d.Feature2D 메소드 클래스는 주어진 두 이미지의 키 포인트 사이에서 일치하는 부분을 찾아 그립니다. 이 메소드는 다음 매개변수를 받아들입니다 -

  • src1매트의 개체 첫 번째 소스 이미지를 나타내는 클래스입니다.

  • 핵심 포인트1MatOfKeyPoint의 개체 첫 번째 소스 이미지의 키 포인트를 나타내는 클래스입니다.

  • src2 − 두 번째 소스 이미지를 나타내는 Mat 클래스의 개체입니다.

  • 핵심 포인트2MatOfKeyPoint의 개체 두 번째 소스 이미지의 키 포인트를 나타내는 클래스입니다.

  • 1대2 일치 - 첫 번째 이미지에서 두 번째 이미지와 일치합니다. 즉, keypoints1[i]에는 keypoints2[matches[i]]에 해당 지점이 있습니다.

  • dst − 대상 이미지를 나타내는 Mat 클래스의 개체입니다.

따라서 두 이미지의 핵심 포인트를 일치시키려면 -

  • imread()를 사용하여 두 개의 소스 이미지를 읽습니다. 방법.

  • detect()를 사용하여 두 이미지의 요점을 가져옵니다. 방법.

  • drawMatches()를 사용하여 일치 항목을 찾고 그립니다. 방법.

예시

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();
   }
}

이미지 입력

이미지1 -

OpenCV Java 라이브러리를 사용하여 두 이미지의 요점을 일치시키는 방법은 무엇입니까?

이미지2 -

OpenCV Java 라이브러리를 사용하여 두 이미지의 요점을 일치시키는 방법은 무엇입니까?

출력

OpenCV Java 라이브러리를 사용하여 두 이미지의 요점을 일치시키는 방법은 무엇입니까?