Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

이미지 배열(Image Array)이란? C++과 OpenCV 예제로 쉽게 이해하기

이미지 배열이란 무엇인가?

배열(Array)은 같은 종류의 데이터를 하나의 이름 아래 순서대로 저장하고, 인덱스 번호를 통해 손쉽게 접근할 수 있게 해주는 편리한 자료 구조입니다. 반복되는 데이터를 일일이 변수로 선언하지 않고도 깔끔하게 관리할 수 있다는 것이 가장 큰 장점입니다.

OpenCV에서도 이 개념을 그대로 활용할 수 있습니다. 여러 장의 이미지를 하나의 이미지 배열에 불러온 뒤, 배열의 인덱스 번호를 사용해 원하는 이미지를 화면에 표시하는 방식입니다. 예를 들어 이미지 10장을 처리해야 할 때 변수 10개를 따로 만드는 대신, 배열 하나에 모두 담아두고 필요할 때마다 인덱스로 꺼내 쓰면 코드가 훨씬 간결해집니다.

아래 예제 프로그램은 행렬(Mat) 배열에 여러 장의 이미지를 로드하고, 인덱스 번호로 호출하여 각각의 창에 표시합니다.

예제 코드

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main(int argc,const char** argv) {
    Mat myImage_array[3];//이미지 3장을 담을 행렬 배열 선언//
    namedWindow("PhotoFrame1");//이미지를 표시할 창 생성//
    namedWindow("PhotoFrame2");//이미지를 표시할 창 생성//
    namedWindow("PhotoFrame3");//이미지를 표시할 창 생성//
    myImage_array[0] = imread("cat.jpg");//'cat.jpg' 이미지를 배열 0번째 요소에 로드//
    myImage_array[1] = imread("cat.jpg");//'cat.jpg' 이미지를 배열 1번째 요소에 로드//
    myImage_array[2] = imread("cat.jpg");//'cat.jpg' 이미지를 배열 2번째 요소에 로드//
    imshow("PhotoFrame1", myImage_array[0]);//배열 0번째 이미지를 "PhotoFrame1" 창에 표시//
    imshow("PhotoFrame2", myImage_array[1]);//배열 1번째 이미지를 "PhotoFrame2" 창에 표시//
    imshow("PhotoFrame3", myImage_array[2]);//배열 2번째 이미지를 "PhotoFrame3" 창에 표시//
    waitKey(0);//사용자가 아무 키나 누를 때까지 대기//
    return 0;
}

코드 핵심 정리

Mat myImage_array[3]; — OpenCV의 Mat(행렬) 타입으로 이미지 3장을 저장할 배열을 선언합니다. Mat은 이미지 픽셀 데이터를 담는 기본 클래스입니다.
namedWindow(); — 이미지를 출력할 창을 미리 생성합니다. 창 이름으로 각각 "PhotoFrame1"부터 "PhotoFrame3"까지 지정했습니다.
imread("cat.jpg"); — 지정한 경로의 이미지 파일을 읽어 배열의 해당 인덱스 위치에 저장합니다. 이 예제에서는 같은 이미지를 세 번 로드했지만, 실제로는 서로 다른 이미지 파일을 각각 넣을 수 있습니다.
imshow(); — 배열에서 인덱스로 이미지를 꺼내 해당 이름의 창에 표시합니다.
waitKey(0); — 사용자가 키보드의 아무 키나 누를 때까지 프로그램을 대기 상태로 유지합니다. 이 값이 없으면 창이 순간적으로 열렸다 바로 닫혀버립니다.

실행 결과

프로그램을 실행하면 세 개의 창이 열리고, 각 창에 배열에 저장된 이미지가 인덱스 순서대로 표시됩니다. 아래는 실제 실행 결과 화면입니다.

이미지 배열(Image Array)이란? C++과 OpenCV 예제로 쉽게 이해하기