OpenCV의 Core 클래스가 제공하는 flip() 메서드를 사용하면 이미지를 x축 또는 y축을 기준으로 손쉽게 뒤집을 수 있습니다. 이 메서드는 다음과 같은 세 가지 매개변수를 받습니다.
- 소스 행렬(src): 원본 이미지의 데이터를 담고 있는 행렬
- 대상 행렬(dst): 처리 결과 이미지를 저장할 빈 행렬
- 플립 코드(flipCode): 뒤집을 방향을 지정하는 정수 값 (0 – x축 기준 상하 반전, 양수(+) – y축 기준 좌우 반전, 음수(-) – x축과 y축 모두 반전)
이미지를 뒤집는 절차
loadLibrary()메서드를 사용해 OpenCV 코어 네이티브 라이브러리를 로드합니다.imread()메서드로 이미지 파일을 읽어 Mat 객체에 저장합니다.- 결과를 담을 빈 Mat 객체를 생성합니다.
- 생성한 행렬들을 매개변수로 전달하며
flip()메서드를 호출합니다. imwrite()메서드에 대상 행렬을 전달하여 결과 이미지를 파일로 저장합니다.
예제 코드
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
public class ChangingOrientation {
public static void main(String args[]) {
// OpenCV 코어 라이브러리 로드
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// 이미지 파일을 읽어 Matrix 객체에 저장
String file ="D:\\Images\\cat.jpg";
Mat src = Imgcodecs.imread(file);
// 결과를 저장할 빈 행렬 생성
Mat dst = new Mat();
// 이미지 방향 변경 (양축 반전)
Core.flip(src, dst, -1);
// 결과 이미지 저장
Imgcodecs.imwrite("D:\\Images\\flipping.jpg", dst);
System.out.println("Image Processed");
}
}입력 이미지

출력 이미지

플립 코드 정리
위 예제에서는 플립 코드로 -1을 사용했기 때문에 원본 이미지가 상하좌우 모두 반전된 결과를 얻을 수 있습니다. 만약 거울처럼 좌우만 반전하고 싶다면 양수 값을, 상하 반전만 원한다면 0을 지정하면 됩니다. 이처럼 Core.flip() 하나만으로도 다양한 방향 전환 효과를 간단히 구현할 수 있습니다.