template<typename _Tp> class Point_
{
public:
...
_TP x, y; // the point coordinates
};
typedef Point_<int> Point2i;
typedef Point_<int64> Point2l;
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;
typedef Point2i Point;
norm()
, dot()
, ddot()
, cross()
, inside()
으로 연산 가능std::cout
출력을 위한 <<
연산자 오버로딩을 지원template<typename _Tp> class Size_
{
public:
...
_Tp width, height; // the width and the height
};
typedef Size_<int> Size2i;
typedef Size_<int64> Size2l;
typedef Size_<float> Size2f;
typedef Size_<double> Size2d;
typedef Size2i Size;
width
, height
area()
std::cout
출력을 위한 <<
연산자 오버로딩을 지원template<typename _Tp> class Rect_
{
public:
...
_Tp x, y, width, height;
};
typedef Rect_<int> Rect2i;
typedef Rect_<float> Rect2f;
typedef Rect_<double> Rect2d;
typedef Rect2i Rect;
x
, y
, width
, height
tl()
, br()
, size()
, area()
, contains()
std::cout
출력을 위한 <<
연산자 오버로딩을 지원Rect rc1; // rc1 = [0 x 0 from (0, 0)]
Rect rc2(10, 10, 60, 40); // rc2 = [60 x 40 from (10, 10)]
Rect rc3 = rc1 + Size(50, 40); // rc3 = [50 X 40 from (0, 0)]
Rect rc4 = rc2 + point(10, 10); // rc4 = [60 x 40 from (20, 20)]
Rect rc5 = rc3 & rc4; // rc5 = [30 x 20 from (20, 20)]
Rect rc6 = rc3 | rc4; // rc6 = [80 x 60 from (0, 0)]
class Range
{
public:
Range();
Range(int _start, int _end);
int size() const;
bool empty() const;
static Range all();
int start, end;
};
start
, end
size()
, empty()
, all()
// std::string을 가져다 씀
typedef std::string cv::String;
String str1 = "Hello";
String str2 = std::string("world");
String str3 = str1 + " " + str2;
Mat imgs[3];
// cv::format() 함수를 이용하여 형식 있는 문자열 생성 가능
// c언어의 printf() 함수와 인자 전달 방식이 유사함
for (int i = 0; i < 3; i++) {
String filename = format("test%02d.bmp", i + 1);
imgs[i] = imread(filename);
}
// Matx는 작은 크기의 행렬을 표현하는 클래스 (주로 16개 원소 이하)
template<typename _Tp, int m, int n> class Matx
{
public:
...
_Tp val[m*n]; // matrix elements
};
// Vec은 16개 이하의 원소를 갖는 열벡터, 2차원 열의 개수를 1로 둠
template<typename _Tp, int cn> class Vec : public Matx<_Tp, cn, 1>
{
public:
...
const _Tp& operator [](int i) const;
_Tp& operator[](int i);
};
std::vector
와 유사한 구조Vec< num-of-data >{b | s | w | i | f | d}
b
: unsigned chars
: shortw
: unsigned shorti
: intf
: floatd
: doubletypedef Vec<uchar, 2> Vec2b; // unsigned char
typedef Vec<uchar, 3> Vec3b; // 컬러 영상에서 많이 사용함
typedef Vec<uchar, 4> Vec4b;
typedef Vec<int, 2> Vec2i; // integer
typedef Vec<int, 3> Vec3i;
typedef Vec<int, 4> Vec4i;
typedef Vec<int, 6> Vec6i;
typedef Vec<int, 8> Vec8i;
typedef Vec<float, 2> Vec2f; // float
typedef Vec<float, 3> Vec3f;
typedef Vec<float, 4> Vec4f;
typedef Vec<float, 6> Vec6f;
typedef Vec<double, 2> Vec2d; // double
typedef Vec<double, 3> Vec3d;
typedef Vec<double, 4> Vec4d;
typedef Vec<double, 6> Vec6d;
// Scalar_: 원소 개수가 4개인 열벡터 (템플릿 클래스)
template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
{
public:
Scalar_():
Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
Scalar_(_Tp v0);
static Scalar_<_Tp> all(_Tp v0);
...
};
// 4개의 double형이 데이터를 갖는 자료형, 자주 사용됨
// (val[0], val[1], val[2], val[3])
typedef Scalar_<double> Scalar;
double val[4]
)을 멤버 변수로 가지고 있는 클래스Scalar gray = 128;
cout <<"gray: " << gray << endl; // gray: [128, 0, 0, 0]
Scalar yellow(0, 255, 255);
cout << "yellow: " << yellow << endl; // yellow: [0, 255, 255, 0]
for (int i = 0; i < 4; i++) // yellow.val[i] == yellow[i]
cout << yellow.val[i] << ", " << yellow[i] << endl;
CV_< bit-depth >{U | S | F}
#define CV_8U 0 // uchar, unsigned char
#define CV_8S 1 // schar, signed char
#define CV_16U 2 // ushort, unsigned short
#define CV_16S 3 // short
#define CV_32S 4 // int
#define CV_32F 5 // float
#define CV_64F 6 // double
#define CV_16F 7 // float16_t: 2byte 실수형, 딥러닝 때 활용
Mat::type()
함수를 이용하여 참조CV_8UC1
(unsigned 8bit, channel 1)CV_8UC3
CV_32FC1
Mat img = imread("lenna.bmp")
cout << "Width: " << img.cols << endl; // Width: 512
cout << "Height: " << img.rows << endl; // Height: 512
cout << "Channels: " << img.channels() << endl; // 3
if (img.type() == CV_8UC1)
cout << "Img is a grayscale image." << endl;
else if (img.type() == CV_8UC3)
cout << "Img is a truecolor image." << endl;
// output: Img is a turecolor image.
typedef const _InputArray& InputArray;
typedef InputArray InputArrayOfArrays;
Mat
, Mat_<T>
, Matx<T, m, n>
, vector<T>
,vector<vector<T>>
, vector<Mat>
, vector<Mat_<T>>
, UMat
, vector<UMat>
, double
InputArray
형식으로 변환하여 Mat 연산을 가능하게 해주는 클래스typedef const _OutputArray& OutputArray;
typedef OutputArray OutputArrayOfArrays;
출력 과정에서 사용되는 클래스
_OutputArray
클래스는 _InputArray
클래스를 상속받아 만들어졌으며, 새로운 행렬을 생성하는 create()
함수가 정의되어 있음
InputOutputArray
의 경우는 입력이자 출력인 경우