Python OpenCV Resize image with aspect ratio using border

사용 버전: Python 3.7.9, OpenCV 4.5.4

파이썬 OpenCV Resize image with aspect ratio using border를 알아보겠습니다.

OpenCV를 활용해서 이미지 크기를 변경할 때, 가로 세로 비율을 무시하고 변경합니다. 여기서는 비율을 유지하면서 크기를 변경하는 방법과 나머지 부분을 0으로 채워(Border 또는 Padding) 정사각형 이미지로 만드는 방법을 알아볼 겁니다.


오늘 사용할 이미지입니다.
올해가 검은 호랑이 해이니까 백두산 호랑이를 써보죠. 케케






우선 이미지를 불러와서 봅시다.

cv2.imread()는 경로에서 이미지를 불러옵니다.

cv2.imshow()는 이미지를 화면에 보여줍니다.

cv2.waitKey()는 키보드를 입력할 때까지 기다립니다.







이미지의 가로 크기와 세로 크기를 확인합니다.

shape는 이미지 배열의 크기를 보여줍니다.






순서는 세로, 가로, 채널 순서입니다.


세로가 594 픽셀, 가로가 895 픽셀, 채널이 3인 이미지입니다.

우리는 이 크기를 256x256 크기로 변경할 겁니다. 그것도 비율을 유지해서 말이죠.


그럼 비율을 알아야겠죠? 비율을 구합니다.

변경할 사이즈를 이미지의 가로, 세로 둘 중에 큰 숫자와 나누어서 얼마만큼 줄여야 하는지를 구합니다.





0.2860... 정도를 우선 먼저 가로, 세로 상관없이 줄여줍니다.




가로가 큰 지, 세로가 큰 지를 비교하여 resize를 해줍니다. 이렇게 나눠준 이유는 ratio를 곱한 값이 소수점이다 보니 올림과 내림 문제가 발생하여 원하는 크기인 256이 안 나올 때가 있기 때문입니다.






비율을 유지하며 줄어든 것을 볼 수 있습니다.



이제, 더 나아가 우리가 할 것은 나머지 비어있는 크기를 채워 정사각형 모양으로 만들 겁니다.

border를 넣을 건데, 작은 사진에서 가로는 256 크기를 만족하니 아마 세로 쪽에 까만 화면이 추가되겠네요.



변경된 이미지에서 256 보다 부족한 수치를 구합니다. 그리고 이것을 양쪽으로 골고루 나눠줍니다.






이제 border를 만들어줍니다.

cv2.copyMakeBorder는 사진에 액자를 만들어주는 기능입니다.

원본 이미지, 위 크기, 아래 크기, 왼쪽 크기, 오른쪽 크기, cv2.BORDER_CONSTANT는 사용자 지정 색상으로 채우겠다는 뜻이고, value는 색상을 의미합니다.






끝.


카테고리: Python, cv2

댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)