본문 바로가기
프로그래밍/파이썬

한장의 이미지르 자동으로 여러장으로 잘라내기

by 훨훨날아 2022. 3. 31.

한장의 이미지의 해상도가 너무 높아 낮은 해상도의 훈련이미지를 만들기 위해 한장의 이미지를 여러장으로 잘라주는 코드를 작성해보았다.

개념 
1. 한장의 이미지의 해상도를 파악한다
2. 원하는 해상도의 크기로 한장의 이미지를 나눈다
3. x좌표와 y좌표를 움직여주면서 이미지를 자르고 저장한다

 

from PIL import Image

파이썬 모듈중 PIL 이라는 모듈을 사용해서 간단하게 이미지를 편집하였다. 

img = Image.open('mcf7.jpg')
width, height = img.size

(2048, 1536)

일단 이미지를 불러온 뒤 이미지의 해상도를 확인한다.

#목표하는 해상도
width_t = 640-1
height_t =480-1

만들고자하는 해상도를 설정한다. Image 에서는 좌상단과 우하단의 좌표를 이용해서 이미지를 자르기 때문에 이미지 해상도에 맞는 좌표를 구해준다.

# x 좌표값 만들기
horizon = int(width/width_t)+1
x_list = []
for i in range (horizon):
    x = i + width_t*i
    x_list.append(x)

x_list

[0, 641, 1282, 1923]

가로의 길이가 기존해상도를 초과하지 않도록 설정하고 구하고자하는 해상도와 곱하면서 x좌표를 구해준다. 같은 방법으로 y좌표값도 만들어준다.

# y 좌표값 만들기
vertical = int(height/height_t)+1
y_list = []
for i in range (vertical):
    y = i + height_t*i
    y_list.append(y)
y_list

[0, 481, 962, 1443]

 

각각 구해진 좌표를 crop에 필요한 형식으로 만들어준다 ( 0,0, 3,3 ) <- 좌상단좌표 + 우하단좌표

# 코디네이트 좌표만들기

co = []

for n in range (horizon-1):
    for k in range (vertical-1):
        coa = (x_list[n], y_list[k], x_list[n+1], y_list[k+1])
        co.append(coa)
co

[(0, 0, 641, 481),
 (0, 481, 641, 962),
 (0, 962, 641, 1443),
 (641, 0, 1282, 481),
 (641, 481, 1282, 962),
 (641, 962, 1282, 1443),
 (1282, 0, 1923, 481),
 (1282, 481, 1923, 962),
 (1282, 962, 1923, 1443)]

 

이미지를 크롭 후 번호를 붙여서 저장하기

for n in range(len(co)):
    img_cropped = img.crop(co[n])
    img_cropped.save('mcf7_crop'+str(n)+'.jpg')

 

from PIL import Image
img = Image.open('mcf7.jpg')

# 이미지 해상도확인
width, height = img.size

# 목표하는 해상도
width_t = 640-1
height_t =480-1



# x 좌표값 만들기
horizon = int(width/width_t)+1
x_list = []
for i in range (horizon):
    x = i + width_t*i
    x_list.append(x)
    


# y 좌표값 만들기
vertical = int(height/height_t)+1
y_list = []
for i in range (vertical):
    y = i + height_t*i
    y_list.append(y)
    
    
# 코디네이트 좌표만들기
co = []

for n in range (horizon-1):
    for k in range (vertical-1):
        coa = (x_list[n], y_list[k], x_list[n+1], y_list[k+1])
        co.append(coa)
        
# 이미지를 크롭하고 저장하기
for n in range(len(co)):
    img_cropped = img.crop(co[n])
    img_cropped.save('mcf7_crop'+str(n)+'.jpg')

 

잘려진 이미지 구역

 

반응형