以下のようにしてはどうでしょうか。
サンプルコード

サンプル画像
画像を読み込む。
python
1import matplotlib.pyplot as plt
2import numpy as np
3from PIL import Image
4
5# 画像を読み込む。
6img = np.array(Image.open('sample.png'))
7
8plt.imshow(img, cmap='gray')
9plt.show()
文字列に変換する。
python
1def convert(img):
2    '''画像 img を表す文字列の配列を返す。
3    '''
4    dst = np.empty(img.shape, dtype=str)
5    
6    chars = ['■', '◉', '●', '@', '*', '+', '・', ' ']
7    for min_val, char in zip(range(0, 255, 32), chars):
8        max_val = min_val + 31
9        # print('{} ~ {}: `{}`'.format(min_val, max_val, char))
10        # min_val <= img <= max_val の画素を char に設定する。
11        dst[(min_val <= img) & (img <= max_val)] = char
12    
13    return dst
変換した文字列の配列を表示する。
python
1dst = convert(img)
2
3for row in dst:
4    for char in row:
5        print(char, end='')
6    print()
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■@*+■+  @■■■■
■■■■■■■■■◉●*+      +  ・●■■■■
■■■■■■■◉          ●●●◉◉■■■■■
■■■■■■■■・     ・+  ■■■■■■■■■■
■■■■■■■■●*@  ・■■◉*■■■■■■■■■■
■■■■■■■■■■■* ●■■■■■■■■■■■■■■
■■■■■■■■■■■* +■■■■■■■■■■■■■■
■■■■■■■■■■■■+ ●■■■■■■■■■■■■■
■■■■■■■■■■■■◉  +@■■■■■■■■■■■
■■■■■■■■■■■■■●   @■■■■■■■■■■
■■■■■■■■■■■■■■◉+  *■■■■■■■■■
■■■■■■■■■■■■■■■■●  +■■■■■■■■
■■■■■■■■■■■■■■■■■   ●■■■■■■■
■■■■■■■■■■■■■■◉*+  ・■■■■■■■■
■■■■■■■■■■■■◉*     +■■■■■■■■
■■■■■■■■■■■@・    ・●■■■■■■■■■
■■■■■■■■■●・    ・●■■■■■■■■■■■
■■■■■■■+・    ・●■■■■■■■■■■■■■
■■■■◉+      *■■■■■■■■■■■■■■■
■■■■*   ・**■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
等幅フォントで表示すると、以下のようにキレイに表示されます。

質問コードに組み込む場合は以下
python
1def convert(img):
2    '''画像 img を表す文字列の配列を返す。
3    '''
4    dst = np.empty(img.shape, dtype=str)
5
6    chars = ['■', '◉', '●', '@', '*', '+', '・', ' ']
7    for min_val, char in zip(range(0, 255, 32), chars):
8        max_val = min_val + 31
9        # print('{} ~ {}: `{}`'.format(min_val, max_val, char))
10        # min_val <= img <= max_val の画素を char に設定する。
11        dst[(min_val <= img) & (img <= max_val)] = char
12
13    return dst
14
15dst = convert(ary)
16
17for row in dst:
18    for char in row:
19        print(char, end='')
20    print()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/07 22:18
2018/11/07 22:44