새로운 창을 생성하는 함수이다.
void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
//! Flags for cv::namedWindow
enum WindowFlags {
WINDOW_NORMAL = 0x00000000,
//!< the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.
WINDOW_AUTOSIZE = 0x00000001,
//!< the user cannot resize the window, the size is constrainted by the image displayed.
WINDOW_OPENGL = 0x00001000,
//!< window with opengl support.
WINDOW_FULLSCREEN = 1,
//!< change the window to fullscreen.
WINDOW_FREERATIO = 0x00000100,
//!< the image expends as much as it can (no ratio constraint).
WINDOW_KEEPRATIO = 0x00000000,
//!< the ratio of the image is respected.
WINDOW_GUI_EXPANDED=0x00000000,
//!< status bar and tool bar
WINDOW_GUI_NORMAL = 0x00000010,
//!< old fashious way
};
창의 위치를 이동, 주어진 이름에 해당하는 창의 위치를 x, y 좌표로 이동시키는 함수이다.
void moveWindow(const String& winname, int x, int y);
창의 크기를 조정, 주어진 이름에 해당하는 창의 크기를 조절하는 함수이다. 창을 생성하는 namedWindow
함수의 flags
에 WINDOW_NORMAL
속성으로 창을 생성해야 하며, imshow()
함수보다 나중에 호출 되어야 정상적으로 동작한다.
void resizeWindow(const String& winname, int width, int height);
키 입력을 대기하는 함수로 프로그램이 종료되어 창이 닫히는 것을 방지한다. 인자로 정수 형태로 시간을 입력받는다. 이때 정수는 milliseconds 단위이다. 또한 입력받을 키의 코드(ESC=27, ENTER=13, TAB=9)
를 반환한다. 특수 키를 입력받고 싶다면 waitKetEx()
함수를 이용하면 된다. 스페이스바의 경우 공백(' ')과 비교하면 된다.
int waitKey(int delay = 0);
int waitKeyEx(int delay = 0);
주어진 이름에 해당하는 창을 닫는 함수이다.
void destroyWindow(const String& winname);
열려있는 모든 창을 닫는 함수이다.
void destroyAllWindows();
이미지 파일을 읽어 Mat 객체로 반환하는 함수이다. flags는 이미지 파일을 불러올 때, 색상 옵션을 설정하는 부분이다. 주로 IMREAD_UNCHANGED
, IMREAD_GRAYSCALE
그리고 IMREAD_COLOR
를 주로 사용한다. 각 옵션은 원본 이미지의 색상 특성을 그대로 반영해서 불러오는 방법이며, 흑백 그리고 색상 모드로 이미지를 불러오는 방법이다.
Mat imread( const String& filename, int flags = IMREAD_COLOR );
//! Imread flags
enum ImreadModes {
IMREAD_UNCHANGED = -1,
//!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). Ignore EXIF orientation.
IMREAD_GRAYSCALE = 0,
//!< If set, always convert image to the single channel grayscale image (codec internal conversion).
IMREAD_COLOR = 1,
//!< If set, always convert image to the 3 channel BGR color image.
IMREAD_ANYDEPTH = 2,
//!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
IMREAD_ANYCOLOR = 4,
//!< If set, the image is read in any possible color format.
IMREAD_LOAD_GDAL = 8,
//!< If set, use the gdal driver for loading the image.
IMREAD_REDUCED_GRAYSCALE_2 = 16,
//!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.
IMREAD_REDUCED_COLOR_2 = 17,
//!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.
IMREAD_REDUCED_GRAYSCALE_4 = 32,
//!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.
IMREAD_REDUCED_COLOR_4 = 33,
//!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.
IMREAD_REDUCED_GRAYSCALE_8 = 64,
//!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.
IMREAD_REDUCED_COLOR_8 = 65,
//!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.
IMREAD_IGNORE_ORIENTATION = 128
//!< If set, do not rotate the image according to EXIF's orientation flag.
};
주어진 이름의 창에 영상을 출력한다. 만약 창이 없다면 새로운 창을 만들고 그 위에 이미지를 출력한다. 입력 이미지의 데이터 타입이 InputArray
인 이유는 Mat
형식 외에도 다양한 타입의 데이터를 시각화할 수 있도록 하기 위함이다.
void imshow(const String& winname, InputArray mat);
InputArray
타입의 변수를 파일로 저장하는 함수이다. 마지막 인자인 params
는 JPG로 저장할 경우, 압축율을 지정할 때 사용되는 인자이다(e.g. {IMWRITE_JEPG_QUARITY, 90} : 압축율을 90%로 지정
). 파일 저장이 정상적으로 이루어지면, true 그렇지 않으면 false를 반환한다.
bool imwrite( const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());
//! Imwrite flags
enum ImwriteFlags {
IMWRITE_JPEG_QUALITY = 1,
//!< For JPEG, it can be a quality from 0 to 100 (the higher is the better). Default value is 95.
IMWRITE_JPEG_PROGRESSIVE = 2,
//!< Enable JPEG features, 0 or 1, default is False.
IMWRITE_JPEG_OPTIMIZE = 3,
//!< Enable JPEG features, 0 or 1, default is False.
IMWRITE_JPEG_RST_INTERVAL = 4,
//!< JPEG restart interval, 0 - 65535, default is 0 - no restart.
IMWRITE_JPEG_LUMA_QUALITY = 5,
//!< Separate luma quality level, 0 - 100, default is -1 - don't use.
IMWRITE_JPEG_CHROMA_QUALITY = 6,
//!< Separate chroma quality level, 0 - 100, default is -1 - don't use.
IMWRITE_JPEG_SAMPLING_FACTOR = 7,
//!< For JPEG, set sampling factor. See cv::ImwriteJPEGSamplingFactorParams.
IMWRITE_PNG_COMPRESSION = 16,
//!< For PNG, it can be the compression level from 0 to 9. A higher value means a smaller size and longer compression time. If specified, strategy is changed to IMWRITE_PNG_STRATEGY_DEFAULT (Z_DEFAULT_STRATEGY). Default value is 1 (best speed setting).
IMWRITE_PNG_STRATEGY = 17,
//!< One of cv::ImwritePNGFlags, default is IMWRITE_PNG_STRATEGY_RLE.
IMWRITE_PNG_BILEVEL = 18,
//!< Binary level PNG, 0 or 1, default is 0.
IMWRITE_PXM_BINARY = 32,
//!< For PPM, PGM, or PBM, it can be a binary format flag, 0 or 1. Default value is 1.
IMWRITE_EXR_TYPE = (3 << 4) + 0, /* 48 */
//!< override EXR storage type (FLOAT (FP32) is default)
IMWRITE_EXR_COMPRESSION = (3 << 4) + 1, /* 49 */
//!< override EXR compression type (ZIP_COMPRESSION = 3 is default)
IMWRITE_EXR_DWA_COMPRESSION_LEVEL = (3 << 4) + 2, /* 50 */
//!< override EXR DWA compression level (45 is default)
IMWRITE_WEBP_QUALITY = 64,
//!< For WEBP, it can be a quality from 1 to 100 (the higher is the better). By default (without any parameter) and for quality above 100 the lossless compression is used.
IMWRITE_HDR_COMPRESSION = (5 << 4) + 0, /* 80 */
//!< specify HDR compression
IMWRITE_PAM_TUPLETYPE = 128,
//!< For PAM, sets the TUPLETYPE field to the corresponding string value that is defined for the format
IMWRITE_TIFF_RESUNIT = 256,
//!< For TIFF, use to specify which DPI resolution unit to set; see libtiff documentation for valid values
IMWRITE_TIFF_XDPI = 257,
//!< For TIFF, use to specify the X direction DPI
IMWRITE_TIFF_YDPI = 258,
//!< For TIFF, use to specify the Y direction DPI
IMWRITE_TIFF_COMPRESSION = 259,
//!< For TIFF, use to specify the image compression scheme. See libtiff for integer constants corresponding to compression formats. Note, for images whose depth is CV_32F, only libtiff's SGILOG compression scheme is used. For other supported depths, the compression scheme can be specified by this flag; LZW compression is the default.
IMWRITE_JPEG2000_COMPRESSION_X1000 = 272
//!< For JPEG2000, use to specify the target compression rate (multiplied by 1000). The value can be from 0 to 1000. Default is 1000.
};
void ex_split_merge(){
Mat img = imread("../data/lenna.bmp");
vector<Mat> channels;
split(img, channels);
imshow("img1", channels[0]);
imshow("img2", channels[1]);
imshow("img3", channels[2]);
swap(channels[0], channels[2]);
Mat merged;
merge(channels, merged);
imshow("merged", merged);
waitKey();
destroyAllWindows();
}
void ex_tick_count(){
int64 start = getTickCount();
my_function();
int64 end = getTickCount();
double ms = (end - start) * 1000 / getTickFrequency();
}
void ex_tick_count(){
TickMeter tm;
tm.start();
// my_function();
tm.stop();
cout << tm.getTimeMilli() << endl;
tm.reset();
tm.start();
// my_function2();
tm.stop();
cout << tm.getTimeMilli() << endl;
}
void ex_masking1(){
Mat src = imread("../data/airplane.bmp");
Mat mask = imread("../data/mask_plane.bmp");
Mat det = imread("../data/field.bmp");
copyTo(src, det, mask);
imshow("src", src);
imshow("mask", mask);
imshow("det", det);
waitKey();
destroyAllWindows();
}
void ex_masking2(){
Mat src = imread("../data/cat.bmp");
Mat logo = imread("../data/opencv-logo-white.png", IMREAD_UNCHANGED);
// 투명도 정보를 가져오기 위해서 IMREAD_UNCHANGED 플래그를 사용한다.
Rect rect(10, 10, logo.cols, logo.rows);
vector<Mat> planes;
split(logo, planes);
merge(vector<Mat>(planes.begin(), planes.begin()+3), logo);
// 투명도를 제외한 BGR 채널만 합쳐서 3채널 이미지를 만든다.
copyTo(logo, src(rect), planes[3]);
imshow("rect", src(rect));
imshow("src", src);
cout << rect;
waitKey();
destroyAllWindows();
}
Assert는 인자로 주어진 조건이 true
가 아닌 경우에 프로그램을 종료하는 매크로 함수이다.
#define CV_Assert( expr ) do { if(!!(expr)) ; else cv::error( cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__ ); } while(0)