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

Java OpenCV로 두 이미지 간 Bitwise OR(비트 OR) 연산 수행하기

Java OpenCV에서는 org.opencv.core.Core 클래스가 제공하는 bitwise_or() 메서드를 사용하여 두 이미지 간의 비트 OR(Bitwise OR) 연산을 손쉽게 수행할 수 있습니다.

이 메서드는 소스(source), 결과 저장용(destination) 행렬 등 세 개의 Mat 객체를 매개변수로 받습니다. 실행 시 소스 행렬들의 각 픽셀 요소에 대해 비트 논리합(disjunction)을 계산하고, 그 결과를 지정된 대상 행렬에 저장합니다.

동작 원리

비트 OR 연산은 두 이미지의 동일한 위치에 있는 픽셀 값들을 이진수로 변환한 뒤, 각 비트별로 OR 연산을 적용합니다. 두 값 중 하나라도 1이면 결과는 1이 되므로, 어두운 배경 위의 밝은 영역을 합치거나 마스크(mask)를 결합할 때 유용하게 활용됩니다.

예제 코드

다음 Java 예제에서는 하나의 이미지를 그레이스케일과 이진(Binary) 이미지로 변환한 후, 두 결과에 대해 비트 OR 연산을 수행합니다.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class BitwiseORExample {
    public static void main(String args[]) throws Exception {
        // OpenCV 코어 네이티브 라이브러리 로딩
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        // 이미지 읽기 (그레이스케일 모드)
        String file = "D://images//elephant.jpg";
        Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_GRAYSCALE);
        HighGui.imshow("Grayscale Image", src);

        // 결과를 저장할 빈 행렬 생성
        Mat dst = new Mat(src.rows(), src.cols(), src.type());
        Mat threshold = new Mat(src.rows(), src.cols(), src.type());

        // 그레이스케일 이미지를 이진 이미지로 변환
        Imgproc.threshold(src, threshold, 100, 255, Imgproc.THRESH_BINARY_INV);
        HighGui.imshow("Binary Image", threshold);

        // 비트 OR 연산 적용
        Core.bitwise_or(src, threshold, dst);
        HighGui.imshow("Bitwise OR operation", dst);

        HighGui.waitKey();
    }
}

코드 설명

  • Imgcodecs.imread(): 이미지 파일을 그레이스케일(IMREAD_GRAYSCALE) 모드로 불러옵니다.
  • Imgproc.threshold(): 임계값 100을 기준으로 이미지를 반전 이진화(THRESH_BINARY_INV)합니다.
  • Core.bitwise_or(): 원본 그레이스케일 이미지와 이진 이미지의 각 픽셀에 비트 OR 연산을 적용합니다.
  • HighGui.imshow(): 처리 단계별 결과를 화면에 출력합니다.

입력 이미지

Java OpenCV로 두 이미지 간 Bitwise OR(비트 OR) 연산 수행하기

실행 결과

위 프로그램을 실행하면 다음과 같은 출력 창들이 순차적으로 표시됩니다.

그레이스케일 이미지 −

Java OpenCV로 두 이미지 간 Bitwise OR(비트 OR) 연산 수행하기

이진 이미지 −

Java OpenCV로 두 이미지 간 Bitwise OR(비트 OR) 연산 수행하기

비트 OR 연산 결과 −

Java OpenCV로 두 이미지 간 Bitwise OR(비트 OR) 연산 수행하기