Mat copy
Mat copy 중 Shallow copy 는 Mat 객체를 복사할 때, 데이터 자체를 복사하는 게 아니라, 데이터가 저장된 메모리의 주소만 복사한다.
그래서 원본과 복사본이 같은 데이터를 공유하게 된다.
Shallow copy는 메모리를 효율적으로 사용하고 싶을 때 유용하지만, 데이터를 독립적으로 수정해야 할 때는 문제가 될 수 있다.
Deep copy는 Shallow copy와 반대로 두 객체를 완전히 메모리 상에서 독립 시킨 체로 복사한다.
OpenCV에서는 clone()이라는 함수를 사용하여 Deep copy를 한다.
또한 OpenCV에서 copyTo라는 함수도 있는데 이미지를 특정 조건에 맞게 다른 매트릭스로 복사할 때 사용한다.
이 함수는 다음과 같이 정의된다.
void copyTo(OutputArray m, InputArray mask)
m은 복사될 대상 매트릭스고, mask는 복사할 부분을 지정하는 마스크다.
만약 m이 적절한 크기나 타입을 가지고 있지 않다면, 함수가 자동으로 m을 재할당해서 올바른 크기와 타입으로 만들어준다.
mask는 0이 아닌 값이 있는 부분만 복사된다.
즉, 0이 아닌 값이 있는 부분은 복사되고, 나머지는 무시된다
이 마스크는 CV_8U 타입이어야 하고, 1채널 또는 다채널일 수 있다.
사용 예시로는 이미지를 복사할 때, 특정 영역만 선택적으로 복사하고 싶을 때 유용하다.
예를 들어, 얼굴 이미지에서 마스크를 사용해서 눈 부분만 다른 이미지로 복사하고 싶을 때 쓸 수 있다.
마치 윈도우 캡쳐 기능과 같이..