Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Python
- docker
- 패치분할
- 그리드분할
- python최단거리
- 이미지빌드
- Set
- osmnx
- GCN
- 좌표거리
- 귀여운고래
- 3d데이터
- 도커 레이어
- 알고리즘
- 3d
- graph
- GIS
- 파이썬
- STL
- 지하철역좌표
- geopandas
- geojson
- 컨테이너
- 도커
- pyvista
- 데이터입수
- MESH
- 폴더조사
- 동명이인찾기
- GNN
Archives
- Today
- Total
이것저것 기록
[python, PIL] 직사각형에서 정사각형 이미지로 변환하기 본문
딥러닝이나 영상 처리를 하다보면 입력데이터로 정사각형을 넣어줘야 하는데, 내가 가진 데이터가 정사각형이 아닌 경우가 많다.
폴더 안의 수많은 데이터 중에서 정사각형이 아닌 이미지들만 뽑아서
정사각형의 이미지로 만들어 반환하려면 어떻게 해야할까? (이미지를 늘이지 않고)
코드를 설명하기에 앞서, 이 작업에 필요한 라이브러리를 import해오자.
import os
from PIL import Image
우선적으로 폴더 안의 파일들을 불러오자.
os.chdir('폴더 경로') #해당 폴더로 이동
files = os.listdir(os.getcwd()) #현재 폴더에 있는 모든 파일을 list로 불러오기
해당 폴더로 이동 후에 '폴더 경로'안에 있는 모든 파일을 files라는 list에 불러왔다.
이 list안의 객체를 하나씩! PIL라이브러리의 Image함수를 통해 불러온 다음에 작업을 시작한다.
for file in files:
img = Image.open(file) #이미지 불러오기
img_size = img.size #이미지의 크기 측정
#직사각형의 이미지가 256x512 이라면, img_size = (256,512)가 된다.
x = img_size[0] #넓이값
y = img_size[1] #높이값
if x != y:
size = max(x, y)
resized_img = Image.new(mode = 'RGB', size = (size, size), color = (채워주고 싶은 색))
offset = (round((abs(x - size)) / 2), round((abs(y - size)) / 2))
resized_img.paste(img, offset)
resized_img.save(file + '_resized.png')
이미지를 늘이지 않고 정사각형으로 만드는 방법은 넓이와 높이 중 짧은 길이를 긴 길이에 맞추어 빈 곳을 채워주는 것이다. (이미지가 잘려도 상관 없다면 크롭하는 방법도 있긴 함. 나중에 포스팅할 예정)
다만 딥러닝의 입력데이터로 쓰이는 경우에는 빈 곳을 그냥 채워줄 수 없기 때문에 데이터의 배경색과 맞춰야한다.
이미지 데이터의 배경색을 '채워주고 싶은 색' 부분에 RGB 값으로 넣으면 된다.
왼쪽의 도면 이미지를 오른쪽의 정사각형 도면 이미지로 바꿨다.
배경색은 채워진 부분이 눈에 띄게 파란색으로 설정했음.
'코린이 > 실무를 위한 코딩 기록' 카테고리의 다른 글
[python] NetworkX를 사용해서 데이터분석 및 시각화 해보기 (5) | 2020.11.02 |
---|---|
[python, folium] 서울 따릉이 대여소 (x,y)좌표 변환 및 지도 시각화 (1) | 2020.10.09 |
[python] 파이썬에서 shape파일을 불러오는 여러 방법들 및 활용 (0) | 2020.09.24 |
[python, openCV] 이미지 파일에서 특정 픽셀값만 추출하기 (0) | 2020.09.21 |
[python, shapely] 이미지(raster)에서 폴리곤(vector) 추출하기 (1) | 2020.09.21 |
Comments