< Mat Class 행렬 생성법 >
// 1
Mat m1(3, 3, CV_32F); // 32bit float형 3x3 행렬
// 2
Mat m2;
m2 = Mat(5, 3, CV_64FC2); // 64bit float형 5x3 행렬 channel 수는 2
// 3 동적할당으로 생성
Mat* m3 = new Mat(Size(640, 480), CV_8UC3); // 480x640 해상도의 컬러이미지(3 channel)
delete m3;
1 ) m1 행렬의 경우 32bit float형의 3행 3열 행렬이 생성된다.
2 ) m2 행렬의 경우 64bit float형의 5행 3열 채널 수는 2인 행렬이 생성된다. (총 원소의 개수는 5 x 3 x 2로 30개)
3 ) m3 행렬의 경우 동적할당으로 생성했으며 Size() 함수를 사용하여 행렬을 생성했다. (사용 완료 후 delete 메모리 해제)
480행 640열 채널 수는 3인 행렬이 생성된다.
Size() 함수의 경우 width(cols), height(rows) 순서로 인자를 넣기 때문에 일반 Mat 클래스 선언과는 행, 열 기입 순서가 반대가 되는 것에 주의하자.
>>> 실행 결과
float data1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
float data2[][3] = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1} };
Mat m6(3, 3, CV_32F, data1);
Mat m7(3, 3, CV_32F, data2);
이렇게 배열을 사용하여 원하는 값으로 초기화 가능 (행 우선으로 채워진다.)
여기서 주의할 점은 배열을 참조하여 행렬을 생성하기 때문에 행렬이나 배열의 값이 변경되었을 때는 참조되는 대상의 값 또한 같이 변경된다.
>>> 실행 결과
< Mat Class 기본 연산 >
** 사칙연산 **
+, -, *, / 사칙연산을 기본적으로 제공해준다.
곱하기를 제외하곤 모두 element-wise 연산을 수행
곱하기의 경우 행렬곱 연산 수행
** 자주 사용하는 함수 **
m7.setTo(1) // m7 Mat의 원소를 모두 1로 설정
m7.inv() // m7 Mat의 역행렬 (inverse of matrix) 반환
m7.t() // m7 Mat의 전치행렬 (transpose of matrix) 반환
728x90
'난 이 분야 전문가야! > OpenCV' 카테고리의 다른 글
Silicon Mac(M1)에서 OpenCV C++ 개발환경 설정 정리 (Xcode) (0) | 2022.07.29 |
---|---|
컴퓨터비전인강 4주차 :: 영상의 변환 (2) | 2021.03.14 |
컴퓨터비전인강 4주차 :: 영상에서 특정 색상 추출 (0) | 2021.03.12 |
컴퓨터비전인강 3주차:: 영상에서의 히스토그램 (0) | 2021.03.07 |
컴퓨터비전인강 3주차 :: 영상에서의 산술과 다양한 색 공간 (0) | 2021.03.06 |