Python OpenCV Mat Type 얻기

예상되는 상황



OpenCV를 사용하여 Laplacian 필터 등을 적용하는 경우
cv2.(input, CV_8U)와 같이 Mat Type(CV_8U 등의 값)을 지정할 필요가 있다.

C++나 C#라면 이 MatType은 input.depth() 로 얻을 수 있다.
그러나 Python의 경우 input의 이미지는 Numpy로 읽혀지기 때문에 Mat Type을 얻을 수 없습니다. 따라서 매번 입력 이미지의 유형에 따라 프로그램을 다시 작성할 필요가 있습니다.

타개책



Numpy 로 input 화상의 채널수와 데이터형을 조사한다.
얻어진 정보를 바탕으로 if 문으로 Mat Type을 판별

구체적으로는



채널 수를 조사하는 방법

if np.ndim(input) == 3:
_, _, ch = input.shape

elif np.ndim(input) ==2: #그레이스케일의 경우
ch = 1

데이터 유형을 확인하는 방법

input.dtype ##uint8 등과 같은 값을 얻을 수 있습니다.

이러한 정보를 바탕으로 Mat Type을 결정합니다.



인용구 : ht tp // // g g g g. bgs포 t. 이 m / 2012 / 11 / st-o-ma t-ty-pe-in-o-cv. HTML
이 표를 보면 채널수와 데이터형에 따라 Mat Type의 숫자가 정해지는 것을 확인할 수 있다.

다행히 cv2.Laplacian 등으로 지정하는 MatType은 숫자이다. (CV_8U의 내용은 숫자)



이렇게 쓰면 괜찮을 것이다.

문제점



어느 쪽이든 귀찮아.
더 예쁜 글쓰기
혹은, 간단하게 하는 방법을 알고 있는 분 있으면 가르쳐 주세요.

좋은 웹페이지 즐겨찾기