1. OpenCV 기초 사용법

OpenJR·2022년 4월 11일
0

OpenCV 4로 배우는 컴퓨터 비전과 머신러닝교재로 배운 OpenCV 함수들을 정리해보고자 한다. 교제에서는 C++을 사용하므로 C++기준으로 작성되었다.


종합

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

int main()
{
    Mat img = imread ("lenna.bmp");
    if (img.empty()) {
        cerr << "Image load failed!" << endl;
        return -1;
    }
    namedwindow("image");
    imshow("image", img);
    waitkey();
    destroyAllwindows();
}

영상 불러오기

Mat imread(const String& filename, int flags = IMREAD_COLOR);

Mat img = imread ("lenna.bmp");
Mat img = imread ("lenna.bmp", IMREAD_GRAYSCALE1);

filename: 불러올 영상 파일 이름. (e.g.) "lenna.bmp", “C:\lenna.bmp"
flags: 영상 파일 불러오기 옵션 플래그

  • IMREAD_UNCHANGED: 영상 속성 그대로 읽기. (e.g.) 투명한 PNG 파일 → 4채널(B, G, R, a) 영상
  • IMREAD_GRAYSCALE1: 1채널 그레이스케일 영상으로 읽기
  • IMREAD_COLOR3: 3채널 BGR 컬러 영상으로 읽기

반환값: 불러온 영상 데이터 (Mat 객체)

비어 있는 Mat 객체 확인

bool Mat::empty() const

img.empty()

반환값: rows, cols, data 멤버 변수가 0이면 true를 반환.

이미지 저장하기

bool imwrite(const String& filename, InputArray img,
             const std::vector<int>& params = std::vector<int>());

imwrite("file.jpg", dst);

filename: 저장할 영상 파일 이름. 파일 이름에 포함된 확장자를 분석하여 해당 파일 형식으로 저장됨.

img: 저장할 영상 데이터 (Mat 객체)

params: 파일 저장 옵션 지정 (속성 & 값의 정수 쌍). 예를 들어, JPG 압축율을 90%로 지정하고 싶으면 {IMWRITE_JPEG_QUALITY, 90}을 지정.

반환값: 정상적으로 저장하면 true, 실패하면 false.

새 창 띄우기

void namedwindow(const String& winname, int flags = WINDOW_AUTOSIZE);

namedwindow("image");

winname: 창 고유 이름. 이 이름으로 창을 구분함.

flag: 창 속성 플래그

  • WINDOW_NORMAL: 영상 크기가 창 크기에 맞게 지정됨
  • WINDOW_AUTOSIZE: 창 크기가 영상 크기에 맞게 자동으로 변경됨
  • WINDOW_OPENGL: OpenGL 지원

창 닫기

void destroyWindow(const String& winname);
void destroyAllWindows();

destroyAllwindows();

winname: 닫고자 하는 창 이름

참고사항: 일반적인 경우 프로그램 종료 시 운영 체제에 의해 열려 있는 모든 창이 자동으로 닫힘

영상출력하기

void imshow(const String& winname, InputArray src);

imshow("image", img);

winname: 영상을 출력할 대상 창 이름

src: 출력할 영상 데이터 (Mat 객체)

영상 출력 방식:

  • 8-bit unsigned: 픽셀 값을 그대로 출력
  • 16-bit unsigned or 32-bit integer: 픽셀 값을 255로 나눠서 출력
  • 32-bit or 64-bit floating-point: 픽셀 값에 255를 곱해서 출력

참고 사항

  • 만약 winname에 해당하는 창이 없으면 WINDOW_AUTOSIZE 속성의 창을 새로 만들고 영상을 출력.
  • 실제로는 waitKey() 함수를 호출해야 화면에 영상이 나타남

키보드 입력 대기

int waitkey(int delay = 0);

waitkey();

if(waitkey(5) == 27) {
    ...
}

delay: 밀리초 단위 대기 시간. delay < 0 이면 무한히 기다림.

반환 값: 눌린 키 값. 키가 눌리지 않으면 -1.

참고 사항

  • waitKey() 함수는 OpenCV 창이 하나라도 있어야 정상 동작함
  • imshow() 함수 호출 후에 waitKey() 함수를 호출해야 영상이 화면에 나타남
    • 주요 특수키 코드: ESC -> 27, ENTER -> 13, TAB ->9
profile
Jacob

0개의 댓글