data structure
Mat
- Mat Object
- images in OpenCV are stored in a Mat Object
consists of
- header
- a pointer to the matrix containing pixel values
주의점
- mat은 body data를 가리키는 포인터로 동작함
→ 복사시 동일한 body data를 가리키는 것을 원하지 않을 경우 변수명.clone() 함수를 사용
Image Types
Type of Mat object
Represent
- CV_C<#Channel>
- e.g. CV_8UC3: 8-bit/pixel , 3 channel
Pixel Type
- BGR (default)
- GRAYSCALE
- HSV
- YUV
- …
Creating Mat
- Mat M;
- Mat M (rows, colums, pixel_type);
- Mat M (rows, colums, pixel_type, Scalar(initial_value));
- Mat M (Size(colums, rows), pixel_type, Scalar(initial_value));
- body data는 RGB가 아닌 BGR로 저장된다.
→ Scalar(B value,G value,R value)
Access to Mat Information
- Mat.type() - return data type
- Mat.depth() - return number of bytes for a matrix element
Access to Mat Pixels
- Mat.at (row,col)[channel] : returns a pointer to the image data
Mat Size
Size = #colums #rows #channels * channel depth
- Mat.colums
- Mat.rows
- Mat.channels
- Mat.elemSize1 - 채널당 비트수
- Mat.elemSize - 한 픽샐당 크기(채널수 * 비트수)
Pointer
- src(원본 데이터)와 dst(복사 데이터)의 body data 공유 (shallow copy)
- 원본 데이터를 공유하지 않고 독립적으로 할당하는 방법 필요 (deep copy)
- 기억장소 추가 할당 + 이미지 데이터 복사
- clone()
- copyTo(Mat)