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 열거형 상수를 지정
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에 저장된 방향 정보를 사용하지 않는다.
- Mat cv::imread(const String& filename, int flags = IMREAD_COLOR);
- 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);
- bool cv::imwrite(const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());
- Mat::empty
- bool Mat::empty()
- 0, NULL 일 때 True, 아니면 False
- nameWindow
- void nameWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
- winname 은 영상 출력 창 상단에 출력되는 창 고유 이름. 이 문자열로 창을 구분함.
- flags 생성되는 창의 속성을 지정하는 플래그, WindowFlags 열거형 상수를 지정.
WINDOW_NORMAL 출력 창의 크기에 맞게 영상 크기가 변경되어 출력됩니다. 사용자가 자유롭게 창 크기를 변경할 수 있다. WINDOW_AUTOSIZE 출력하는 영상 크기에 맞게 창 크기가 자동으로 변경됩니다. 사용자가 임의로 창 크기를 변경할 수 없다. WINDOW_OPENGL OpenGL을 지원합니다. - Default로 WINDOW_AUTOSIZE인데 만약 본인의 모니터 해상도보다 큰 영상을 출력할 때 일부가 보이지 않을 수 있다.
- 따라서 마우스 또는 resizeWindow 함수로 크기를 변경하고 싶다면 WINDOW_NORMAL 로 지정 해야한다.
- void nameWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
- destroyWindow, destroyAllWindow
- void destroyWindow(const String& winname);
- winname에 해당하는 창을 닫는다.
- void destroyAllWindow();
- 모든 창을 닫는다.
- void destroyWindow(const String& winname);
- moveWindow
- void moveWindow(const String& winname, int x, int y);
- winname에 해당하는 창의 위치를 (x, y) 좌표로 이동.
- 좌표는 모디터 왼쪽 상단을 (0, 0)으로 간주.
- void moveWindow(const String& winname, int x, int y);
- resizeWindow
- void resizeWindow(const String& winname, int width, int height);
- winname에 해당하는 창을 (width, height) 크기로 변경한다.
- 창 전체 크기가 아닌 창의 view 영역에 나타나는 영역을 의미.
- void resizeWindow(const String& winname, int width, int height);
- imshow
- void imshow(const String& winname, InputArray mat);
- winname은 영상을 출력할 대상, mat은 출력할 영상 데이터(Mat 객체)
- InputArray는 Mat, vector<T> 등 다양한 객체를 표현할 수 있는 클래스, 대부분 Mat 클래스를 전달한다는 의미.
- void imshow(const String& winname, InputArray mat);
- waitKey
- int waitKey(int delay = 0);
- 키 입력을 기다릴 시간, 0보다 작으면 inf
- return 값은 눌린 키 값, 눌리지 않으면 -1
- int waitKey(int delay = 0);
728x90
'AI > 컴퓨터 비전' 카테고리의 다른 글
GoogleNet (InceptionNet) 정리해보기 (1) | 2023.10.10 |
---|---|
IOU : 모델이 예측한 결과와 실측 Box가 얼마나 정확하게 겹치는 가를 나타내는 지표 (0) | 2022.12.04 |
NMS : 여러 Bounding Box 중 확실한 Box만 선택하는 기법 (0) | 2022.12.04 |
[Python, OpenCV 4로 배우는 컴퓨터 비전과 머신러닝] CH03 (0) | 2022.12.04 |
[Python, OpenCV 4로 배우는 컴퓨터 비전과 머신러닝] CH02 (0) | 2022.11.25 |