008. §이미지 처리1 - 유튜버 사진 ASCII ART 로 제작하기!

SEUNGHO YOO·2025년 10월 10일

이미지처리

목록 보기
1/2


코딩 하다보면 이런 문자들 본 적 많으시지 않은가요?
이 글을 보시는 분들이라면 다들 아시겠지만 아스키 코드를 이용한 아스키 아트 라는 영역이 있는데요.
아스키 아트(ASCII Art)는 아스키 코드로 정의된 문자(예: 영어 알파벳, 숫자, 기호 등)를 조합해 그림이나 이미지를 표현하는 텍스트 기반 예술입니다.

저도 프로그램 코딩 하다보면 로그 창에 이런 아스키 문자를 통해서 필요 한 경우 가독성을 위해서 종종 삽입하고는 했는데
제가 자주 보는 유튜버 분께서 영상 마지막에 항상 팬들이 직접 그려준 본인 이미지나 이쁜 것들을 삽입하시는데

어??
내가 이미지 처리 경험들 있는데 아스키 코드 이용해서 이미지 처리해서 변환 해보면 어떨까?????
잘 만들어서 영상 마지막에 내 이미지가 삽입 되고 싶어서 도전 해보겠습니다.


영상 마지막에 항상 이런식으로 첨부 해주셔서 제가 나중에 제 이미지가 삽입 되면 마무리에 또 첨부 하겠습니다.


아이디어

OpenCV로 인물 이미지를 불러와서, RGB 밝기값을 이해하고 → 밝기에 따라 ASCII 문자로 표현

이런 식으로 생각 했습니다.
이미지는 흑백으로 표현이 되야하고 그러면 명암이 중요할텐데 RGB 값으로 밝기값이 0~255로 정해지니까 각 밝기 영영마다 특정 문자로 치환해서 표현해야겠다고 생각했습니다.
예를 들어 밝은 부분은 `` 를 이용하고, 어두운 부분은 # 이런식으로 많이 채워진 문자를 이용하는 것 입니다.

그렇기 위해서 원본 이미지에서 밝기 값이 여러 영역으로 잘 표현된 이미지를 찾아보고 코딩해 보겠습니다



과정

먼저 전체 코드는 제 github에 올려 두겠습니다.
다음 링크를 통해 내려 받으셔서 자유롭게 사용해주세요!

https://github.com/YooSeungHo0124/image2ASCIIart/

setup_env.py
해당 코드로 가상환경에서 필요 모듈을 다운받고 바로 images 폴더 속 이미지를 변환해서 results 폴더에 결과가 생성 되도록 하였습니다.

터미널 통해서 과정 이해 하실수 있도록 적어 두었습니다.
메인 코드가 되는 변환은 이렇게 했습니다.

# =========================================================
# 2️⃣ 문자 밝기 매핑 설정
# (어두운 → 밝은 순서)
# =========================================================
chars = ['ㅂ', 'ㅁ', 'ㄹ', 'ㅇ', 'ㅐ', 'ㅏ', '♡', '❤︎', ' ']

def brightness_to_char(value):
    idx = int(value / 255 * (len(chars) - 1))
    return chars[idx]

제가 이미지 변환하려는 유튜버가 배말랭님 입니다.
그래서 해당 하는 자음, 모음, 특수 기호를 이용해서
어두운 부분 → 밝은 부분 순서대로 나열

ㅂ, ㅁ, ㄹ, ㅇ : 어두운 영역 표현

ㅐ, ㅏ : 중간 밝기

♡, ❤︎, ' ' : 밝은 영역

이를 통해서 나중에 각 픽셀 밝기값(0~255)을 이 리스트의 인덱스와 매핑해서 어떤 문자를 출력할지 결정하게 하였습니다.

본인이 원하는 문자를 chars 배열에 넣으시면 원하는 글자로 이미지를 변환 하실수 있을 거에요!


결과

  • 원본
  • 1대1 변환


그림판으로 확대해보면 제가 지정했던 문자들로 변형된거 보이시죠?

이미지 사이즈가 크면 1대1 변환에 코스트가 많이 발생하니까 크기 조절 할수 있도록 코드에 scale = 1.0로 설정 해두었습니다.
축소하고 싶으시다면 이 scale 값을 줄여주시면 됩니다.


  • scale 1.0

  • scale 0.5

  • scale 0.3

  • scale 0.1


어떤가요? 가벼운 마음으로 만들어 봤는데 나름 괜찮네요.
특히 원하는 문자로 표현 해서 내가 원하는 사람에게 특정 초성이나 하트 같은 기호로 변환해주면 좋아하지 않을까요??

추가적으로 이미지를 따로 누끼 따거나 SAM 같은 모델로 segmentation 해서 넣으시면 인물 사진으로만 ASCII 문자 만드는 그런식으로도 활용하셔도 될 것 같습니다.

profile
응용수학과 전공 후 AI 전문성을 쌓고있는 취준생!

0개의 댓글