Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

OpenCV Java 라이브러리로 이미지의 특징점(KeyPoints)을 검출하는 방법

개요

컴퓨터 비전에서 특징점(keypoint) 검출은 이미지 내에서 객체 인식, 매칭, 추적 등에 활용되는 핵심 기술입니다. org.opencv.features2d 패키지의 추상 클래스 Feature2D가 제공하는 detect() 메서드를 사용하면 주어진 이미지에서 특징점을 손쉽게 검출할 수 있습니다.

이 메서드를 호출할 때는 원본 이미지를 나타내는 Mat 객체와, 검출된 특징점을 저장할 빈 MatOfKeyPoint 객체를 인수로 전달해야 합니다.

또한 검출된 특징점을 이미지 위에 시각적으로 표시하려면 org.opencv.features2d.Features2d 클래스의 drawKeypoints() 메서드를 사용하면 됩니다.

참고 사항

  • Feature2D는 추상 클래스이므로 detect() 메서드를 직접 호출할 수 없으며, 반드시 하위 클래스 중 하나를 인스턴스화해서 사용해야 합니다. 여기서는 속도가 빠르기로 잘 알려진 FastFeatureDetector 클래스를 사용했습니다.

  • Features2DFeatures2d는 features2d 패키지에서 서로 다른 의미로 쓰일 수 있으므로 대소문자 혼동에 주의하세요.

예제 코드

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.core.Scalar;
import org.opencv.features2d.FastFeatureDetector;
import org.opencv.features2d.Features2d;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;

public class DetectingKeyPoints {
   public static void main(String args[]) throws Exception {
      // OpenCV 핵심 네이티브 라이브러리 로드
      System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

      // 이미지 파일 읽기
      String file = "D:\\Images\\javafx_graphical.jpg";
      Mat src = Imgcodecs.imread(file);

      // 이미지의 특징점 검출
      Mat dst = new Mat();
      MatOfKeyPoint matOfKeyPoints = new MatOfKeyPoint();
      FastFeatureDetector featureDetector = FastFeatureDetector.create();
      featureDetector.detect(src, matOfKeyPoints);

      // 검출된 특징점 그리기
      Features2d.drawKeypoints(src, matOfKeyPoints, dst, new Scalar(0, 0, 255));

      // 결과 화면에 출력
      HighGui.imshow("Feature Detection", dst);
      HighGui.waitKey();
   }
}

코드 설명

  • System.loadLibrary(): OpenCV 네이티브 라이브러리를 로드하여 Java 바인딩이 네이티브 코드를 사용할 수 있도록 합니다.

  • Imgcodecs.imread(): 지정된 경로의 이미지 파일을 읽어 Mat 객체로 반환합니다.

  • FastFeatureDetector.create(): FAST(Features from Accelerated Segment Test) 알고리즘 기반의 특징점 검출기 객체를 생성합니다.

  • drawKeypoints(): 검출된 특징점을 원본 이미지 위에 빨간색(0, 0, 255)으로 표시합니다.

입력 이미지

OpenCV Java 라이브러리로 이미지의 특징점(KeyPoints)을 검출하는 방법

출력 결과

OpenCV Java 라이브러리로 이미지의 특징점(KeyPoints)을 검출하는 방법