728x90
728x170
(문)
각각 두가지에 대하여 캠으로 받아 

IplImage *frame = 0;
Mat frame;

을 캠으로 받아서 depth를 출력해봤더니

IplImage 에서는 depth값이 8이 나오고

Mat 에서는 depth값이 0이 나오더라구요

각각의 의미에 대해 알고 싶습니다.

가령 Mat img(480,720,CV_32F) 인 경우에는 depth값이 5이고,

IplImage* img; img = cvCreateImage(cvSize(480,720),IPL_DEPTH_32F,3); 인 경우는 32로 나오고

Mat에서의 depth 5값은 IplImage에서의 depth 32값과 같은걸로 알고 있는데 아닌지요

왜 캠으로 frame을 받을때는 각각의 depth값이 다르게 나오는지도 너무 궁금하네요..

(답)

두 구조체/클래스는 서로 다른 값 정의를 가지고 있습니다.

뜻은 같지만 그 뜻을 표현하는 방식이 다른거죠

예를 들면 우리가 먹는 사과를 우리나라는 "사과"라고 발음하고 표기하지만

영미권에서는 "애플"이라 발음하고 "apple"라고 쓰는 것과 비슷합니다.


8U 즉, 한 픽셀에 8비트의 언사인드 값을 가지는 타입을 예로 들어봅시다

iplimage의 depth는 IPL_DEPTH_8U 를 리턴합니다.(types_c.h)

디파인을 따라가보면 8입니다.

이 IPL_DEPTH 계열 디파인들은 비트수를 그대로 표현해 주고 signed인 경우에 0x80000000 을 OR시켜 알려줍니다.

그런데 Mat의 depth()는 CV_8U 를 리턴합니다.(cvdef.h)

이 값은 0입니다.

이 CV_계열 디파인들은 단순열거 되어 있습니다.

즉, 같은 8비트 계열인 CV_8S 는 1입니다.

두 구조체/클래스의 스코프가 다르기 때문에 나오는 문제죠

아마도 bpp를 계산하고 싶으신 듯 한데,

mat은 elemSize()라는 함수를 가지고 있습니다.

한 픽셀을 몇 "바이트"로 표현하는지 리턴해 주는 함수입니다.

따라서 여기에 8을 곱하면 bpp의 계산이 가능합니다
728x90
그리드형
Posted by kjun.kr
,