[codeit - python] 이미지를 다루는 모듈 만들기

SUNGJIN KIM·2021년 10월 18일
0

codeit

목록 보기
8/18

과제 설명

이번 과제에서는 이미지를 다루는 모듈을 만들고 사용해 볼 겁니다.

이미지 표현 방법

이번 과제에서는 이미지를 비트맵 형식으로 표현합니다. 비트맵은 꽤나 직관적인데, 각 픽셀(이미지를 구성하는 가장 작은 점들)의 색깔을 이진수로 저장해 놓은 맵(지도)입니다. 이번 과제에서는 흑백 이미지만 다뤄볼 건데요. 이미지가 흑백이면 0과 1로 흰색과 검은색을 나타낼 수 있겠죠? 아래 그림은 어떤 흑백 이미지를 비트맵 형식으로 표현한 겁니다.

(자세한 문제는 코드잇을 통해 진행)

과제 및 소스 코드

1) cil.py 파일에 있는 invert(img) 함수를 구현해 주세요.

2) main 파일이 잘 실행되도록 코드를 완성해 주세요.

처음 해당 문제를 접했을때는, 어떤식으로 풀어야 하는지 감이 오지 않았다.
문제와 구현된 함수를 읽어보면서 문제 풀이에 대한 계획을 세웠다.

1) 현재 주어진 이미지의 값을 반전하기
2) 주어진 문제와 동일하게 출력하기 (형식이 n * n 이 될 수 있도록)

값을 변환하는 것은 생각보다 수월했다.
문제 내 주어진 함수를 통해 반전을 시키고, 해당 값을 새로운 배열에 넣으면 쉽게 반전이 가능했다.

# 이미지 색상 반전
def invert(img):
    # img 이미지 크기
    height, width = len(img), len(img[0])
    new_img = []

    ### 코드를 작성해 주세요 ###
    for i in range(height):
        for j in range(width):
            new_img.append([invert_bit(img[i][j])])
    return new_img
    
# 비트 반전
def invert_bit(bit):
    return 1 - bit

값을 반전시키는 데 까지는 성공했으나, 문제는 출력 형식이였다.
원하는 기대결과 값은 3x3 , 4x4 와 같은 형식이였으나, 실제 해당 코드로 출력했을때는 아래와 같이 출력되었다.

실행 코드

image1:
0 1 1 
1 0 1 
0 0 1 

image1:
1 
0 
0 
0 
1 
0 
1 
1 
0 

값은 반전이 되는데, 왜 형식이 다르게 노출이 될까?
한참을 고민하던 중, 내부 main.py에는 작성되어있으나 쓰지않는 함수가 있는 것을 확인했다.

empty_image라는 함수인데, height, width의 중첩된 이미지 리스트를 만드는 함수인데, 생각해보니 현재 코드에서 중첩된 리스트로 노출되지 않는 것은 형식이 이렇게 되어있지 않아서가 아닐까 생각이 들었고, 해당 함수를 이용하여 코드를 완전 변경하였다.

# 이미지 색상 반전
def invert(img):
    # img 이미지 크기
    height, width = len(img), len(img[0])
    new_img = empty_image(height,width)

    ### 코드를 작성해 주세요 ###
    for i in range(height):
        for j in range(width):
            new_img[i][j] = invert_bit(img[i][j])
    return new_img


# -1로 채워진 새로운 이미지 생성
def empty_image(height, width):
    new_img = []
    for i in range(height):
        new_img.append([-1] * width)
    return new_img


# 비트 반전
def invert_bit(bit):
    return 1 - bit

실행 코드

image1:
0 1 1 
1 0 1 
0 0 1 

색상 반전된 이미지

image1:
1 0 0 
0 1 0 
1 1 0 

비로소 원하는 답을 얻게 되었다 :)
이렇게 쉽게 갈 수 있는 것을.. 다음부터는 문제가 주어졌을 때, 기본으로 주어진 부분들에 대해서 상세하게 확인 후 적용할 여지가 있는지 살펴봐야겠다.

profile
#QA #woonmong

0개의 댓글