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 -
Image2 -
Đầu ra