본문 바로가기

# 미사용/OpenCV

[OpenCV] 이미지 입출력


 이미지 읽기

Mat  imread(path, flag) 함수로 이미지를 읽을 수 있다.


자주 쓰는 플래그의 종류

IMREAD_UNCHANGED    파일에 저장된 그대로 가져온다. (alpha채널 포함)
IMREAD_GRAYSCALE    그레이화된 이미지로 가져온다.
IMREAD_COLOR        alpha를 제외한 컬러채널만 가져온다.
...



샘플 이미지



example)

Mat img = imread("./opencv_logo.png", IMREAD_UNCHANGED);

//! img가 로딩되지 않았다면 익셉션 발생.
CV_Assert(img.data);

//! test라는 윈도우에 img 출력
imshow("test", img);

//! 곧바로 프로그램 종료하지 않기.
waitKey();



 이미지 쓰기

bool  imwrite(path, mat, params) 함수로 이미지를 쓸 수 있다.


path의 확장자 이름으로 파일포맷이 결정되며,


params는 vector<int> 타입으로써, 

IMWRITE 상수와 그 설정값이 인접되게 push_back되어야 한다.


example)

Mat img = imread("./opencv_logo.png", IMREAD_UNCHANGED);
CV_Assert(img.data);

//! jpg 파일로 저장.
vector<int> jpg_params;
jpg_params.push_back(IMWRITE_JPEG_QUALITY);
jpg_params.push_back(50);
imwrite("./output.jpg", img, jpg_params);

//! png 파일로 저장.
vector<int> png_params;
png_params.push_back(IMWRITE_PNG_COMPRESSION);
png_params.push_back(9);
imwrite("./output.png", img, png_params);



 RGB 이미지 채널

RGB는 각각 0~255이므로, 각 채널은 8비트로 표현된다.

즉, RGB 이미지를 표현하기 위해서는 CV_8UC3 타입으로 설정해야 한다.


명암만 필요하다면 CV_8UC1 타입이어야 하며,

알파도 필요하다면 CV_8UC4 타입이어야 한다.


아닌경우 오버플로우나 언더플로우 문제가 일어날 수 있다.