Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จะจับคู่ประเด็นสำคัญของสองภาพโดยใช้ไลบรารี OpenCV Java ได้อย่างไร


The detect() วิธีการของ org.opencv.features2d.Feature2D (นามธรรม) ชั้นตรวจจับจุดสำคัญของภาพที่กำหนด ในวิธีนี้ คุณต้องผ่าน Mat วัตถุที่แสดงภาพต้นฉบับและ MatOfKeyPoint . ที่ว่างเปล่า วัตถุที่จะถืออ่านประเด็นสำคัญ

drawMatch() วิธีการของ org.opencv.features2d.Feature2D class ค้นหาการจับคู่ระหว่างจุดสำคัญของภาพสองภาพที่กำหนดและดึงออกมา วิธีนี้ยอมรับพารามิเตอร์ต่อไปนี้ -

  • src1 − วัตถุของ เสื่อ คลาสที่แสดงอิมเมจต้นทางแรก

  • ประเด็นสำคัญ1 − วัตถุของ MatOfKeyPoint คลาสที่แสดงจุดสำคัญของรูปภาพต้นทางแรก

  • src2 − วัตถุของคลาส Mat แทนอิมเมจที่มาที่สอง

  • ประเด็นสำคัญ2 − วัตถุของ MatOfKeyPoint คลาสที่แสดงจุดสำคัญของอิมเมจต้นทางที่สอง

  • matches1to2 − จับคู่จากภาพแรกกับภาพที่สอง ซึ่งหมายความว่า keypoints1[i] มีจุดที่สอดคล้องกันใน keypoints2[matches[i]]

  • วันที่ − วัตถุของคลาส Mat ที่แสดงภาพปลายทาง

ดังนั้นเพื่อให้ตรงกับประเด็นสำคัญของภาพสองภาพ −

  • อ่านภาพต้นฉบับทั้งสองภาพโดยใช้ imread() วิธีการ

  • รับประเด็นสำคัญของภาพทั้งสองโดยใช้ detect() วิธีการ

  • ค้นหาและวาดการแข่งขันโดยใช้ drawMatch() วิธีการ

ตัวอย่าง

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 ได้อย่างไร