이미지는 여러 배열로 이루어져 있으므로 그냥 가져가서 사용할 경우
본래의 이미지가 변경될 위험이 있다. 그렇기 때문에 img.copy() 를
통해서 복사해 가는 것이 안전하다.
이미지 크기에 관한 기본 정보를 얻고 싶다면
img.shape
를 통해서 (height, width, channel) 을 전달 받을 수 있다.
여기서 channel 이란, 하나의 색을 표현하기 위해 존재하는 색의 가짓수로, 보통의 경우 RGB 와 같이 3개의 채널을 갖고 있지만,
흑백 사진의 경우에는 흰색과 검정색으로 이루어져있기 때문에 1개의 채널을 갖고 있다.
resize 를 할 경우, 단순히 크기를 늘리고 줄이는 것이 아니라
크기를 늘릴 경우엔 픽셀에 대한보간법, 줄일 경우엔 픽셀에 대한 병합법이 사용된다.
사이즈를 변경하는 방법에는 두가지가 있는데,
하나는 절대 크기로 이미지를 변경하는 것이고(dsize)
다른 하나는 상대 크기로 이미지를 변경하는 것이다(fx, fy)
dst = cv2.resize(src, dstSize, fx, fy, interpolation)는 입력 이미지(src), 절대 크기(dstSize), 상대 크기(fx, fy), 보간법(interpolation)으로 출력 이미지(dst)을 생성한다.
interpolation(보간법)은, 사이즈가 변경됐을 때 늘어나거나 줄어든 공간에 대한 추론을 어떻게 할 것인지에 대한 설정이라고 보면된다.
이미지 사이즈를 늘리거나 줄이게 되면 새로운 영역에 대해서 새로운 값을 배정하거나 압축해서 새로운 값을 배정해야 한다. 이에 대한 설정이 보간법인 것이다.
interpolation 속성
cv2.INTER_NEAREST 이웃 보간법
cv2.INTER_LINEAR 쌍 선형 보간법
cv2.INTER_LINEAR_EXACT 비트 쌍 선형 보간법
cv2.INTER_CUBIC 바이큐빅 보간법
cv2.INTER_AREA 영역 보간법
cv2.INTER_LANCZOS4 Lanczos 보간법
[ref]
https://076923.github.io/posts/Python-opencv-8/
https://opencv-python.readthedocs.io/en/latest/doc/15.imageContours/imageContours.html
https://daewoonginfo.blogspot.com/2019/05/opencv-python-resize.html