참고
디지털화된 이미지는 픽셀이라는 부르는 점들이 모여서 형상을 만든다. 아래 이미지처럼 격자상에 있는 이미지 픽셀의 값은 0~255사이의 값으로 가지도록 해서 파일로 저장된다. 그레이 스케일 영상의 경우 0이면 검은색 점이며 255는 흰색 점이고 그 사이 값들은 해당 값을 강도로 가지는 회색 점들이다. 이런 점들이 모여 디지털 이미지를 화면에 표현하게 된다.
이미지 출처: http://goo.gl/Q0It8
C++로 넘어오면서 자동으로 해주기 때문에 메모리 관리를 따로 해줄 필요가 없다니 다행이지만 튜토리얼에 따르면 임베디드에서는 아직 C만 지원한다는 게 문제라고 한다. 예전에 Mat가 아닌 IplImage를 사용했을 때 할당했다가 수동으로 메모리를 해제해주어야 했었다. 그 과정에서 버그도 많이 생기고…
이제 Mat을 사용하게 되면 더 이상 수동으로 메모리를 할당하고 다시 해제하는 일이 없어도 된다. 클래스 생성자에서 할당을 해주고 클래스 소멸자에서 해제를 해주게 되어 있다.
Mat클래스는 두 개의 데이터를 저장하고 있는데 하나는 매트릭스(matrix) 헤더로 매트릭스의 크기, 저장하는 방법, 매트릭스가 저장되어 있는 주소 정보등을 포함하고 있다. 다른 하나는 실제 이미지의 픽셀값들이 저장되는 데이터 매트릭스에 대한 포인터이다. 매트릭스의 차원은 저장하는 방법에 따라 달라진다. 예를 들어 그레이스케일 이미지는 1개의 채널을 가지므로 1차원일 테고 RGB 이미지는 3개의 채널을 가지고 있으므로 3차원이 되어야 할 것이다. 매트릭스의 헤더는 일정한 크기를 가지지만 메트릭스의 크기는 이미지에 따라 달라진다.
영상처리 속도를 개선하기 위해서 OpenCV에서는 참조 카운팅(reference counting) 시스템을 사용한다. 각각의 Mat 오브젝트들은 자신만의 매트릭스 헤더를 가지고 있지만 매트릭스는 공유하여 같은 데이터 매트릭스를 다수의 Mat 오브젝트에서 같이 사용하는 것이다. 이렇게 되면 Mat 오브젝트간에 매트릭스를 복사 시 일일이 픽셀별로 값을 가져다 복사할 필요 없이 매트릭스 헤더를 복사하고 매트릭스 포인터만 가리키게 하면 되므로 이미지 데이터 복사 속도가 개선된다. 더 이상 데이터 매드릭스를 사용하는 Mat 객체가 없을 경우 메모리에서 해제된다.
같은 데이터 매트리스를 참조
아래 코드에서 세 개의 Mat 객체들은 결국 같은 데이터 매트릭스를 포함하기 때문에 화면에 출력해보면 똑같은 이미지를 볼 수 있게 된다.
아래 코드처럼 세 개의 Mat가 하나의 데이터 매트릭스를 공유하고 있기 때문에 하나의 이미지를 이진화 하게 되면 다른 이미지들도 이진화가 되버린다.
Mat 객체의 데이터 매트릭스 중 일부만 다른 Mat 객체로 가리키게 할 수도 있다. 다시 말하면 원본이미지의 일부만 다른 Mat 객체에서 가리키게 할 수 있다는 것이다.
Rect를 이용하여 사각형 영역을 가져 올 수 도 있고, Range를 이용하여 특정 열과 행들만 범위를 정해서 가져올 수 도 있다.
마찬가지로 같은 데이터 매트릭스를 공유하기 때문에 하나의 영향이 다른 것에 영향을 주게 된다.
부분 이미지를 이진화한 결과도 다른 이미지에 영향을 준다.
새로운 복사본 생성
clone과 CopyTo를 사용하면 실제 데이터 매트리스를 복사하기 때문에 하나의 이미지를 이진화 한다고 해서 다른 이미지에 영향을 주지 않는다.
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
opencv에서 2대이상의 카메라 사용하기 (34) | 2015.09.24 |
---|---|
OpenCV 튜토리얼 – OpenCV를 사용하여 두 개의 이미지를 더하기(블렌딩) (6) | 2015.02.08 |
OpenCV 튜토리얼 – 마스크(mask) 오퍼레이션 (0) | 2015.01.09 |
OpenCV 튜토리얼 – Mat (기본 이미지 컨테이너) 2/2 (6) | 2015.01.08 |
opencv에서 두 대 이상의 webcam 사용하여 캡처하기 (6) | 2010.04.04 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!