AI/컴퓨터 비전

[C++, OpenCV 4로 배우는 컴퓨터 비전과 머신러닝] CH02

HHB 2022. 11. 25. 15:44

OpenCV 4로 배우는 컴퓨터 비전과 머신러닝, C++

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

using namespace cv;
using namespace std;

int main() {
	cout << "Hello OpenCV" << endl;

	Mat img; //Mat 객체 생성
	img = imread("lenna.bmp"); //객체 정의
	//Mat 클래스는 cv namespace안에서 정의되었다.
	//Mat은 다양한 자료형의 행렬을 표현할 수 있는 범용 행렬 클래스다.

	if (img.empty()) { //img를 제대로 불러오지 않아 비어있다면 True , 잘 불러왔다면 False
		cerr << "Image load Failed" << endl;
		return -1;
	}

	namedWindow("Image"); //영상을 화면에 나타내기 위한 새로운 창을 생성 그 창의 이름은 Image
	imshow("Image", img); //Image라는 창에 img 영상을 보여준다.

	waitKey(); //사용자의 키보드 입력을 기다리는 함수, 키보드를 누르기 전까지 영상을 화면에 나타나게 해 준다.

	return 0;
}
  • cv::imread
    • Mat cv::imread(const String& filename, int flags = IMREAD_COLOR);
      • filename 은 불러올 영상 파일 이름, 만약 존재하지 않으면 빈 Mat을 반환
      • flags 는 ImreadModes 열거형 상수를 지정
      ImreadModes 열거형 상수
      IMRAED_UNCHANGED 입력 파일에 지정된 그대로의 컬러 속성을 사용한다. 투명한 PNG, TIFF 파일의 경우, 알파 채널까지 이용하여 4채널 영상으로 불러온다.
      IMREAD_GRAYSCALE 1채널 그레이스케일 영상으로 변환하여 불러온다.
      IMREAD_COLOR 3채널 BGR 컬러 형식으로 변환하여 불러온다.
      IMREAD_REDUCED_GRAYSCALES_2 크기를 1/2로 줄인 1채널 그레이스케일 영상으로 변환해 불러온다.
      IMREAD_REDUCED_COLOR_2 크기를 1/2로 줄인 3채널 BGR영상으로 변환해 불러온다.
      IMREAD_IGNORE_OPIENTATION EXIF에 저장된 방향 정보를 사용하지 않는다.
  • cv::imwrite
    • bool cv::imwrite(const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());
      • filename 은 저장할 영상 파일 이름
      • img 는 저장할 영상 데이터 (Mat 객체)
      • params 는 저장할 파일 형식에 의존적인 별도의 옵션 지정
        • lenna.jpg로 저장할 때 JPEG 압축률을 95%로 정한다.
        vector<int> params;
        params.push_back(IMWRITE_JPEG_QUALITY);
        params.push_back(95);
        imwrite("lenna.jpg", img, params);
        
  • Mat::empty
    • bool Mat::empty()
    • 0, NULL 일 때 True, 아니면 False
  • nameWindow
    • void nameWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
      • winname 은 영상 출력 창 상단에 출력되는 창 고유 이름. 이 문자열로 창을 구분함.
      • flags 생성되는 창의 속성을 지정하는 플래그, WindowFlags 열거형 상수를 지정.
      WindowFlags 열거형 상수 설명
      WINDOW_NORMAL 출력 창의 크기에 맞게 영상 크기가 변경되어 출력됩니다. 사용자가 자유롭게 창 크기를 변경할 수 있다.
      WINDOW_AUTOSIZE 출력하는 영상 크기에 맞게 창 크기가 자동으로 변경됩니다. 사용자가 임의로 창 크기를 변경할 수 없다.
      WINDOW_OPENGL OpenGL을 지원합니다.
      • Default로 WINDOW_AUTOSIZE인데 만약 본인의 모니터 해상도보다 큰 영상을 출력할 때 일부가 보이지 않을 수 있다.
      • 따라서 마우스 또는 resizeWindow 함수로 크기를 변경하고 싶다면 WINDOW_NORMAL 로 지정 해야한다.
  • destroyWindow, destroyAllWindow
    • void destroyWindow(const String& winname);
      • winname에 해당하는 창을 닫는다.
    • void destroyAllWindow();
      • 모든 창을 닫는다.
  • moveWindow
    • void moveWindow(const String& winname, int x, int y);
      • winname에 해당하는 창의 위치를 (x, y) 좌표로 이동.
      • 좌표는 모디터 왼쪽 상단을 (0, 0)으로 간주.
  • resizeWindow
    • void resizeWindow(const String& winname, int width, int height);
      • winname에 해당하는 창을 (width, height) 크기로 변경한다.
      • 창 전체 크기가 아닌 창의 view 영역에 나타나는 영역을 의미.
  • imshow
    • void imshow(const String& winname, InputArray mat);
      • winname은 영상을 출력할 대상, mat은 출력할 영상 데이터(Mat 객체)
      • InputArray는 Mat, vector<T> 등 다양한 객체를 표현할 수 있는 클래스, 대부분 Mat 클래스를 전달한다는 의미.
  • waitKey
    • int waitKey(int delay = 0);
      • 키 입력을 기다릴 시간, 0보다 작으면 inf
      • return 값은 눌린 키 값, 눌리지 않으면 -1
728x90
반응형
LIST