본문 바로가기

파이썬

cv2.remap 함수에 대한 고찰

cv2.remap 함수는 이미지의 각 픽셀들을 사전에 정의된 위치로 하나씩 옮겨서 이미지 전체를 변형하는 함수이다.

cv2.remap 함수의 파라미터로는 src, map1, map2가 들어간다.

  • src는 원본 이미지
  • map1은 원본 이미지의 특정 픽셀이 옮겨가야할 좌표의 x값
  • map2는 y좌표값이다.

src의 shape이 (h,w,3)이라고 할 때,

당연하게도 map1, map2는 모두 (h,w)의 shape을 가져야 한다. 

그러나, map1의 shape이 (h,w,2), map2의 shape이 (h,w)를 갖는 경우를 볼 수 있는데,

이는 리매핑 과정에서 사용되는 map1, map2의 m1type이 다르게 정의되어있어서 발생하는 문제이다.

 

기본적으로는 (map1, map2) 가 (CV_32FC1, CV_32FC1) 타입(16bit float)을 갖지만,

만약 (map1, map2)가 (CV_16SC2, CV_16UC1)으로 정의 되어있었다면

map1이 x,y 좌표값의 반올림 값을 가지기 때문에 shape이 (h,w,2)이고,

map2는 리매핑 시 사용되는 interpolation table의 index만을 저장하기 때문에 shape이 (h,w)가 되는 것이다.

 

굳이 이렇게 쓰는 이유는 더 빠르게 연산할 수 있기 때문이라고 한다.

'파이썬' 카테고리의 다른 글

WSL 현재 시간 동기화 문제  (0) 2023.03.22
FATAL: exception not rethrown  (0) 2023.03.21
과제를 성공시키기 위해 한 짓거리  (0) 2021.07.22
파이썬으로 '크롤링' 하는법  (0) 2021.01.10