>  기사  >  백엔드 개발  >  Python을 사용하여 이미지를 문자 그림으로 변환하는 방법에 대한 자세한 설명

Python을 사용하여 이미지를 문자 그림으로 변환하는 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-08-22 13:24:342687검색

이 글에서는 Python에서 그림을 문자 그림으로 변환하는 예를 주로 소개합니다. 편집자가 꽤 좋다고 생각해서 지금 공유하고 참고용으로 올려보겠습니다. 에디터를 따라가서 살펴보겠습니다.

캐릭터 페인팅은 그림의 픽셀을 캐릭터로 대체하여 생성됩니다.

하지만 픽셀은 서로 다른 색상을 가지고 있습니다. 서로 다른 색상의 픽셀을 해당 문자로 어떻게 인코딩합니까?

변환 방법:

  • 컬러 사진을 회색조 이미지로 변환

  • 색상 심도의 RGB 값에 따라(값 범위는 0~255이며, 0은 검정색, 255는 흰색)

  • 좋아하는 문자 세트를 포함

  • 문자 세트 순서와 문자 세트 길이에 따라 RGB 값이 해당 문자로 인코딩됩니다.

RGB

RGB 색상 모드는 빨간색(R), 녹색(G), 파란색(B)의 세 가지 색상 채널을 변경하고 이를 서로 중첩하여 다양한 색상을 얻습니다. 이 표준에는 인간이 인지할 수 있는 거의 모든 색상이 포함됩니다.

일반적으로 RGB 각각에는 256단계의 밝기가 있으며 0, 1, 2...에서 255까지 숫자로 표현됩니다. 참고로 가장 높은 숫자는 255이지만 0도 숫자이므로 총 256개의 레벨이 있습니다.

그레이스케일 이미지

그레이스케일 이미지란 우리가 흔히 보는 흑백 사진처럼 밝기 정보만 담고 있고 색상 정보는 포함하지 않은 이미지를 말합니다. 밝기가 어두운 곳에서 밝은 곳으로 연속적으로 변합니다.

따라서 회색조 이미지를 표현하려면 밝기 값을 양자화해야 합니다. 일반적으로 0부터 255까지 256개 레벨로 나뉘며, 0이 가장 어둡고(완전히 검은색) 255가 가장 밝습니다(완전히 흰색). 색상을 표현하는 방법으로는 RGB 외에 컬러사진의 RGB를 Gray값으로 바꾸는 공식은


#在PIL中,从模式“RGB”转换为“L”模式(灰度模式)
Gray = 0.299R+0.587G+0.114B

예를 들어 영문 소문자 26자를 문자셋으로 사용합니다. 문자 집합 용량은 26(한 문자에 해당하는 값 간격 너비 = 256/문자 집합 길이)

여기서 간격 너비는 256/26=9.8),

회색과 문자 집합의 해당 관계:

회색 간격 대응 문자


[0.0, 9.8)这|a
[9.8, 19.6)|b
[19.6, 29.4)|c
...|...
[225.6, 235.4]|x
[235.4, 245.2]|y
[245.2, 255.0]|z

RGB 문자 변환 기능


char_string = 'abcdefghijklmnopqrstuvwxyz'

def rgb2char(r, g, b):
  length = len(char_string)
  gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)

  # 每个字符对应的gray值区间宽度
  unit = (256.0 + 1) / length

  # gray值对应到char_string中的位置(索引值)
  idx = int(gray / unit)
  return char_string[idx]

전처리

크기가 너무 크거나 작으면 txt를 열 때 문자 그림을 인식할 수 없습니다. 파일. 따라서 먼저 이미지 크기를 적절한 크기로 조정해야 합니다. 필요에 따라 스케일링 계수 델타 계수를 변경할 수 있습니다


from PIL import Image

#预处理(将图片尺寸压缩,并转为灰度图) 
def preprocess(img_path,delta=100):
  img = Image.open(img_path) 
  # 获取图片尺寸
  width, height = img.size
  # 获取图片最大边的长度 if width > height:
    max = width
  else:
    max = height

  # 伸缩倍数scale
  scale = max / delta
  width, height = int(width / scale), int(height / scale)
  img = img.resize((width, height)) 
  return img

이미지를 문자로

이미지를 읽고 좌표에 따라 픽셀의 RGB 튜플을 얻은 다음 문자로 인코딩할 수 있습니다


def img2char(img_obj, savepath):
  txt = ''
  width, height = img_obj.size
  # 获取像素点的rgb元组值,如(254, 0, 0),并将其转化为字符
  for i in range(height):
    line = ''
    for j in range(width):
      line += rgb2char(*img_obj.getpixel((j, i)))
    txt = txt + line + '\n'

  # 保存字符画
  with open(savepath, 'w+', encoding='utf-8') as f:
    f.write(txt)




img_obj = preprocess(img_path)
img2char(img_obj, savepath)

그림 삽입

char_string을 변경하고 원하는 효과를 변환하세요

위 내용은 Python을 사용하여 이미지를 문자 그림으로 변환하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.