관심쟁이 영호

[#9] OpenCV(With. C++) ㅣ Mat행렬 크기변경, 복사 본문

카테고리 없음

[#9] OpenCV(With. C++) ㅣ Mat행렬 크기변경, 복사

관심쟁이 영호 2020. 11. 12. 01:30
반응형

안녕하세요!

관심쟁이 영호입니다.

 

오늘은 Mat행렬의 크기변경과 복사 그리고 Vector클래스에 대해서

공부를 해볼게요!

 


1. Mat 크기변경 함수

 

먼저 살펴보고 갈게요!

 

resize()

행의 개수를 기준으로 기존 행렬의 크기를 변경한다. 기존 행렬의 행의 개수 보다 sz가 작으면 하단 행을 제거하고, 크면 기존 행렬 하단에 행을 추가한다.

 

resize(변경할 행의 개수, 추가되는 행의 원소에 할당하는 스칼라 값);

스칼라값을 안넣어줘도 됩니다!

 

reshape()

행렬의 전체 원소 개수는 바뀌지 않으면서, 행렬의 모양을 변경하여 새 행렬을 반환한다.

기존 행렬과 변경된 행렬의 전체 원소 개수가 일치하지 않으면 에러가 발생한다.

 

reshape(변경될 채널 개수, 변경될 행의 개수)

 

create()

기존에 존재하는 행렬의 차원, 행, 열, 자료형을 변경하여 다시 생성한다. 기존 행렬과 크기와 자료형이 다르면 기존 메모리를 해제하고 새로운 데이터를 생성한다.

 

create(행렬의 행과 열의수, 타입, 차원 수, 행렬의 크기를 나타내는 정수 배열)

이렇게 들어가네요!

 

코드를 볼게요.

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

void main() {
	Mat m1(2, 6, CV_8U); // 2행, 6열 char형 행렬 선언!
	Mat m2 = m1.reshape(2); //2채널 행렬로 변경 생성!
	Mat m3 = m1.reshape(3, 2); // 3채널, 2행 행렬로 변경 생성!

	m1.create(3,5,CV_16S); //기존 행렬을 새로 생성!
	
	waitKey(0);
	

}

이렇게 사용한답니다!

 

2. Mat행렬의 복사

Mat행렬은 일반적으로 복사를 할 수가 없어요 ㅠㅠ

그래서 내부 메서드를 사용한답니다.

메서드를 살펴볼게요!

 

clone()

행렬 데이터와 같은 값을 복사해서 새로운 행렬을 반환한다.

해당 메서드는 인수가 없어요!

 

copyTo()

행렬 데이터를 인자로 입력된 mat행렬에 복사한다.

copyTo(복사될 목적 행렬, 마스크값)

 

converTo()

행렬 원소의 데이터 타입을 변경하여 인수로 입력된 mat 행렬에 반환한다.

converTo(복사될 목적 행렬, 타입)

 

이렇게 사용하네요!


 

오늘은 여기까지!

고생하셨습니다 ㅎㅎ

 

300x250
Comments