2. OpenCV 주요 클래스

OpenJR·2022년 4월 11일
0

Point 클래스

Point pt1, pt2(x,y);

double v = norm(pt2);
double pt3 = dot(pt1, pt2);

자료형

typedef Point_<int64>	Point21;
typedef Point_<float>	Point2f;
typedef Point_<double> 	Point2d;
typedef Point2i			Point;

Size 클래스

Size s1, s2(width, height);

int a = s2.area();

자료형

typedef Size_<int>		Size2i;
typedef Size_<int64>	Size21;
typedef Size_<float>	Size2f;
typedef Size_<double>	Size2d;
typedef Size2i			Size;

Rect 클래스

Rect rc1, rc2(x, y, width, height);

Rect rc3 = rc1 + Size(width, height);
Rect rc4 = rc2 + Point(x, y);

자료형

typedef Rect_<int>		Rect2i;
typedef Rect_<float>	Rect2f;
typedef Rect_<double>	Rect2d;
typedef Rect2i			Rect;

Scalar 클래스

크기가 4인 double 배열(double val [4])을 멤버 변수로 가지고 있는 클래스

4채널 이하의 영상에서 픽셀 값을 표현하는 용도로 자주 사용

[ ] 연산자를 통해 원소에 접근 가능

  • GRAYSCALE: [128, 0, 0, 0]

  • COLOR: [255, 255, 255, 0]

Scalar s1, s2(128), s3(255, 255, 255); 

Mat 클래스

Mat 클래스의 타입(type)

  • 행렬의 깊이와 채널 수를 한꺼번에 나타내는 매크로 상수

  • Mat::type() 함수를 이용하여 참조

  • 형식: CV_ 8UC1

    • 비트 수 (8/16/32/64)

    • 채널 수 (1, 2, 3, 4)

    • 정수형의 부호(S/U) 또는 실수형(F)

    •   +--------+----+----+----+----+------+------+------+------+
        |        | C1 | C2 | C3 | C4 | C(5) | C(6) | C(7) | C(8) |
        +--------+----+----+----+----+------+------+------+------+
        | CV_8U  |  0 |  8 | 16 | 24 |   32 |   40 |   48 |   56 |
        | CV_8S  |  1 |  9 | 17 | 25 |   33 |   41 |   49 |   57 |
        | CV_16U |  2 | 10 | 18 | 26 |   34 |   42 |   50 |   58 |
        | CV_16S |  3 | 11 | 19 | 27 |   35 |   43 |   51 |   59 |
        | CV_32S |  4 | 12 | 20 | 28 |   36 |   44 |   52 |   60 |
        | CV_32F |  5 | 13 | 21 | 29 |   37 |   45 |   53 |   61 |
        | CV_64F |  6 | 14 | 22 | 30 |   38 |   46 |   54 |   62 |
        +--------+----+----+----+----+------+------+------+------+

초기화

Mat img1, img2(480, 640, CV_8UC1),
	img3(Size(640, 480), CV_8UC3),

	img4(480, 640, CV_8UC1, Scalar(128)),
	img5(480, 640, CV_8UC1, 128),
	img6(480, 640, CV_8UC3, Scalar(128, 0, 255));

Mat	mat0 = Mat::zeros(src.rows, src.cols, CV_8UC1);
Mat	mat1 = Mat::zeros(480, 640, CV_8UC1);
Mat	mat2 = Mat::ones(480, 640, CV_8UC1);
Mat	mat3 = Mat::eyes(3, 3, CV_8UC1);

float data[] = {1, 2, 3, 4, 5, 6};
Mat mat4(2, 3, CV_32FC1, data);

mat4.create(256, 256, CV_32U3);
mat4 = Scalar(255, 0, 0);

참조 (얕은 복사)

Mat img1 = imread("dog.bmp");

Mat img2 = img1;
Mat img3 = img1(Rect(x, y, width, height));

픽셀 값 참조

Mat mat1 = Mat::zeros(3, 4, CV_8UC1);

int list[Mat.area()] = {};
cnt = 0
for (int y = 0; y < mat1.rows; y++) {
	for (int x = 0; x < mat1.cols; x++) {
		list[cnt] = mat1.at<uchar>(y, x);
        ++cnt;
	}
}

복사 (깊은 복사)

Mat img1 = imread("dog.bmp");

Mat img2 = img1.clone();

Mat img3;
img1.copyTo(img3);
profile
Jacob

0개의 댓글