300x250
이화여자대학교 OpenSWProject 수업을 정리한 글입니다.
Mat
- C++ OpenCV에서 제공하는 n차원 dense array 클래스
- 실수 혹은 허수 값의 벡터와 행렬값을 저장하기 위함. (ex. 흑백, 컬러 이미지 등)
How to allocate new array data
- Using Mat Constructors
- Mat::Mat()
- Mat::Mat(int rows, int cols, int type)
- Mat::Mat(Size size, int type)
- Mat::Mat(Size size, int type, const Scalar& s)
- Mat::Mat(int rows, int cols, int type, const Scalar& s)
- Using create()
- Mat::create(int rows, int cols, int type)
- Mat::create(Size size, int type)
cf.) 용어 정리
- rows: 2차원 배열에서의 행의 개수
- cols: 2차원 배열에서의 열의 개수
- type: 배열 타입 (배열이 담을 수 있는 원소 타입을 지정해줌. 몇비트인지 unsigned인지 signed인지 등)
- s: 배열 원소의 초기설정값 지정
- size: 행, 열의 개수를 따로 지정해주는 것이 아니라 Size(cols, rows)의 형태로 지정해줄 수 있음.
How to release array data
- Mat::~Mat() [calls Mat::release()] → 그러나 main 마지막에서 자동적으로 call이 되기 때문에 굳이 코딩해줄 필요 X
Type
- CV_8U: 8-bit unsigned integer: uchar (0~255) → 이미지 픽셀값이 0 ~ 255라는 점을 보았을 때 이미지를 표현할 수 있는 최소한의 배열 타입이라고 짐작할 수 있을 듯
- CV_8S: 8-bit signed integer: schar (-128~127)
- CV_16U : 16-bit unsigned integer: ushort (0~65535)
- CV_16S: 16-bit signed integer: short (-32768~32767)
- CV_32S: 32-bit signed integer: int (-2147483648~2147483647)
- CV_32F: 32-bit floating-point number: float (-FLT_MAX~FLT_MAX, INF, NAN)
- CV_64F: 64-bit floating-point number: double (-DBL_MAX~DBL_MAX, INF, NAN)
또한 원소 데이터 타입 이후에 채널 개수를 표현할 수 있다. ex) CV_8UC1 등 → 이때는 채널 개수 고정
혹은 CV_8UC(n) or CV_MAKETYPE(CV_8U, n) 매크로로 채널 개수를 지정해줄 수 있다.
Example
- Mat M(7,7,CV_32FC2, Scalar(1,3))
: 7X7의 허수 행렬. 이때 행렬 원소의 디폴트값은 1+3i 이다. 또한 채널 2개인 32비트 float으로 원소 구성이 되어 있다. - M.create(100, 60, CV_8UC3)
: 100X60의 3채널로 구성된 8비트 unsigned integer 행렬. Mat M에 담겨 있던 이전 데이터는 모두 deallocate됨.
300x250
'Computer Science > computer vision' 카테고리의 다른 글
Challenges in Visual Recognition (0) | 2021.03.28 |
---|