이미지에 적용되는 라플라시안(Laplacian) 변환은 화면 내에서 픽셀의 밝기(강도)가 급격하게 변화하는 영역을 강조하는 기법입니다. 이러한 특성 때문에 이미지의 윤곽선을 찾아내는 에지 검출(Edge Detection)에 널리 활용됩니다.
OpenCV에서는 Imgproc 클래스가 제공하는 Laplacian() 메서드를 사용하여 손쉽게 라플라시안 변환을 수행할 수 있습니다. 이 메서드는 다음과 같은 매개변수를 받습니다.
- src, dst — 원본 이미지와 결과 이미지를 담을 두 개의 Mat 객체
- ddepth, ksize, scale, delta — 변환의 출력 깊이(depth), 커널 크기(size), 배율(scale), 델타(delta) 값을 나타내는 네 개의 정수
- borderType — 이미지 경계 처리 방식을 지정하는 정수 값
파라미터 상세 설명
- ddepth(CV_16S): 라플라시안 연산 결과에는 음수 값이 포함될 수 있으므로, 8비트인 CV_8U 대신 정밀도가 높은 CV_16S를 사용하는 것이 일반적입니다.
- ksize: 연산에 사용할 커널의 크기입니다. 홀수 값만 허용되며, 값이 클수록 더 넓은 영역을 고려한 에지가 검출됩니다.
- convertScaleAbs(): CV_16S로 계산된 결과를 다시 화면에 표시 가능한 CV_8U 형태로 변환할 때 사용합니다.
예제 코드
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class LaplacianTransform extends Application {
public void start(Stage stage) throws IOException {
// OpenCV 네이티브 라이브러리 로드
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 원본 및 결과 이미지를 저장할 Mat 객체 생성
Mat src = new Mat();
Mat dst = new Mat();
// 이미지 읽기
src = Imgcodecs.imread("D:\\Images\\road3.jpg");
// 라플라시안 변환 적용
Imgproc.Laplacian(src, dst, CvType.CV_16S, 3, 1, 0, Core.BORDER_DEFAULT);
// Imgproc.Laplacian(src, dst, ddepth, ksize, scale, delta, borderType);
// 결과를 다시 CV_8U 형태로 변환
Core.convertScaleAbs(dst, dst);
// 행렬을 JavaFX WritableImage로 변환
Image img = HighGui.toBufferedImage(dst);
WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
// ImageView 설정
ImageView imageView = new ImageView(writableImage);
imageView.setX(10);
imageView.setY(10);
imageView.setFitWidth(575);
imageView.setPreserveRatio(true);
// Scene 객체 설정
Group root = new Group(imageView);
Scene scene = new Scene(root, 595, 400);
stage.setTitle("Laplacian Transform");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}코드 실행 흐름 요약
System.loadLibrary()로 OpenCV 네이티브 라이브러리를 로드합니다.Imgcodecs.imread()를 통해 디스크에서 이미지를 불러와 Mat 객체에 저장합니다.Imgproc.Laplacian()으로 에지 검출 변환을 수행합니다.Core.convertScaleAbs()로 결과 행렬을 8비트 이미지로 변환합니다.- JavaFX의
ImageView를 사용해 결과 화면을 출력합니다.
입력 이미지

실행 결과
위 프로그램을 실행하면 아래와 같은 창이 생성됩니다.

결과 이미지를 보면 원본 사진의 윤곽선과 밝기가 급격히 변하는 부분들이 흰색 선으로 뚜렷하게 드러나는 것을 확인할 수 있습니다. 이처럼 라플라시안 변환은 차량 번호판 인식, 의료 영상 분석, 물체 윤곽 추출 등 다양한 컴퓨터 비전 분야의 전처리 단계에서 유용하게 활용됩니다.