개강한 공대생 2024. 8. 31. 15:49

imread는 OpenCV에서 이미지를 파일에서 읽어올 때 사용하는 아주 기본적인 함수다.

imread 함수는 지정된 파일로부터 이미지를 읽어들여 Mat 객체에 저장하는 역할을 한다.

Mat 객체는 OpenCV에서 이미지 데이터를 저장하고 처리하는 데 사용되는 기본 데이터 구조다.

 

imread 함수는 다음과 같은 시그니처를 가지고 있다.

Mat imread( const string& filename, int flags = 1 );

 

const string& filename : 이 매개변수는 이미지 파일의 경로와 파일 이름을 나타낸다. 예를 들어 "lena.png" 또는 "C:/images/lena.png"처럼 파일의 경로와 이름을 문자열로 전달한다.

 

int flags = 1: 이 매개변수는 이미지를 읽어올 때 어떻게 해석할지를 결정한다. 기본값은 1이다.

플래그 값에 따라 이미지를 다르게 읽어들일 수 있다.

IMREAD_COLOR (1) : 기본값으로, 이미지를 컬러로 읽어온다. 이미지를 3채널(BGR)로 읽어들이며, 알파 채널(투명도)은 무시된다.

IMREAD_GRAYSCALE (0) : 이미지를 그레이스케일로 읽어온다. 이미지를 단일 채널로 읽어들이며, 픽셀 값은 0~255 사이의 밝기를 나타낸다.

IMREAD_UNCHANGED (-1): 이미지 파일의 모든 데이터를 그대로 읽어온다. 알파 채널이 있는 이미지는 4채널로, 없는 이미지는 3채널로 읽힌다.

 

예시 코드는 다음과 같다.

 

#include <opencv2/opencv.hpp>

int main() {
    // 기본값으로 컬러 이미지 읽기
    cv::Mat colorImage = cv::imread("lena.png");
    
    // 그레이스케일 이미지로 읽기
    cv::Mat grayImage = cv::imread("lena.png", cv::IMREAD_GRAYSCALE);
    
    // 알파 채널 포함해서 읽기
    cv::Mat unchangedImage = cv::imread("lena.png", cv::IMREAD_UNCHANGED);
    
    // 이미지가 잘 불러와졌는지 확인
    if (colorImage.empty()) {
        std::cout << "이미지를 불러올 수 없습니다!" << std::endl;
        return -1;
    }

    // 결과 이미지 보여주기
    cv::imshow("Color Image", colorImage);
    cv::imshow("Grayscale Image", grayImage);
    cv::imshow("Unchanged Image", unchangedImage);
    cv::waitKey(0);

    return 0;
}

 

이렇게 사용할 수 있다.

cv::Mat grayImage = cv::imread("lena.png", cv::IMREAD_GRAYSCALE); 이 함수를 아래처럼 쓸 수 있다.

cv::Mat grayImage = cv::imread("lena.png", 0);

 

근데 왜 cv::Mat grayImage = cv::imread("lena.png", cv::IMREAD_GRAYSCALE); 이렇게 쓰냐면.. 가독성을 위해서다.

다른 사람이 코드를 볼 때 0이 무엇을 의미하는지 모를 수도 있기 때문에..