Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào để đối sánh các điểm chính của hai hình ảnh bằng cách sử dụng thư viện Java OpenCV?


Phát hiện () phương thức của org.opencv.features2d.Feature2D (trừu tượng) lớp phát hiện các điểm chính của hình ảnh đã cho. Đối với phương pháp này, bạn cần phải vượt qua Mat đối tượng đại diện cho hình ảnh nguồn và một MatOfKeyPoint trống đối tượng để giữ các điểm chính đã đọc.

drawMatches () phương thức của org.opencv.features2d.Feature2D lớp tìm các điểm trùng nhau giữa các điểm chính của hai hình đã cho và vẽ chúng. Phương thức này chấp nhận các tham số sau -

  • src1 - Một đối tượng của Mat lớp đại diện cho hình ảnh nguồn đầu tiên.

  • keypoints1 - Một đối tượng của MatOfKeyPoint lớp đại diện cho các Điểm chính của hình ảnh nguồn đầu tiên.

  • src2 - Một đối tượng của lớp Mat đại diện cho hình ảnh nguồn thứ hai.

  • keypoints2 - Một đối tượng của MatOfKeyPoint lớp đại diện cho các Điểm chính của hình ảnh nguồn thứ hai.

  • match1to2 - Đối sánh từ hình ảnh đầu tiên với hình ảnh thứ hai, có nghĩa là keypoints1 [i] có một điểm tương ứng trong keypoints2 [so khớp với [i]].

  • dst - Một đối tượng của lớp Mat đại diện cho hình ảnh đích.

Do đó, để khớp các điểm chính của hai hình ảnh -

  • Đọc hai hình ảnh nguồn bằng cách sử dụng imread () phương pháp.

  • Nhận các điểm chính của hai hình ảnh bằng cách sử dụng phát hiện () phương pháp.

  • Tìm và vẽ các kết quả phù hợp bằng cách sử dụng drawMatches () phương pháp.

Ví dụ

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

Hình ảnh đầu vào

Hình ảnh1 -

Làm thế nào để đối sánh các điểm chính của hai hình ảnh bằng cách sử dụng thư viện Java OpenCV?

Image2 -

Làm thế nào để đối sánh các điểm chính của hai hình ảnh bằng cách sử dụng thư viện Java OpenCV?

Đầu ra

Làm thế nào để đối sánh các điểm chính của hai hình ảnh bằng cách sử dụng thư viện Java OpenCV?