Python OpenCV 圖片轉字元圖畫

本篇將介紹如何使用 OpenCV 與 Python 來將圖片轉換成字元畫,最後並將這些字元圖畫顯示在 console 終端機上或者輸出寫入到檔案裡,
在學影像處理時一些枯燥乏味的基礎理論若是能夠應用出來的話,更能加深學習的印象與提昇學習的意願,以下就來開始寫個影像處理的小專案吧!

本篇文章中將會學習到知識以及需要具備的基礎,

  • Python 基礎
  • OpenCV 函式庫的使用
  • argparse 函式庫的使用
  • Linux 命令列操作

小試身手. img2char 將圖片轉成字元圖畫

以下為 python 搭配 opencv 寫成的一個 img2char 小程式,能將一張圖片轉成字元圖畫輸出,

簡單介紹一下重點吧~
一開始使用 opencv 的 cv2.imread 將圖片讀進來並且轉成灰階格式,
接著使用 cv2.resize 縮放到指定的大小,
最後用迴圈遍歷整個影像,將每個灰階 pixel 轉成對應的 ascii 的字元,再將其結果輸出,
重點程式碼如下,完整程式碼分享在Github上,歡迎 fork 與支持點擊星星star~

img2char.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
import cv2
import numpy as np

def gray2char(gray):
length = len(ascii_char)

unit = (256.0 + 1)/length
return ascii_char[int(gray/unit)]

if __name__ == '__main__':
img = cv2.imread(in_image_filename, 0)
img = cv2.resize(img, (width,height), interpolation=cv2.INTER_NEAREST)

txt = ""
for i in range(height):
for j in range(width):
txt += gray2char(img[i,j])
txt += '\n'
print(txt)

不想寫 code,那就直接使用 img2char 吧

img2char程式碼下載下來,首先假設你已經安裝好 python3 與 opencv 環境後,
img2char 的使用指令如下,
-W 是指定輸出的字元圖畫的寬度, -H 則是高度,預設會將字元圖畫輸出在 console 上,同時也會輸出到 output.txt 檔案裡

1
$ python3 img2char.py opencv-logo.png -W=60 -H=74

先看看原圖

再看看 img2char 執行後的結果輸出如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
                            ZZZ                            
ZZZZZZZZZZ
ZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZ ZZZZZZZZZZZ
ZZZZZZZZZZ ZZZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZZ
ZZZZZZZZZZ ZZZZZZZZZZ
ZZZZZZZZZZZ ZZZZZZZZZZ
ZZZZZZZZZ ZZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZ ZZZZZZZ
ZZZZZ ZZZZZZ
ZZZZ ZZZZ
ZZ ZZ
Z Z

///////
////////////
////////////// MM M
/////////////// MMM MMM
/////////////// MMMMM MMMMM
//////////////// MMMMMM MMMMMM
//////////////// MMMMMMMM MMMMMMMM
///////////////// MMMMMMMM MMMMMMMMM
//////////////// MMMMMMMMMM MMMMMMMMMM
/////////// MMMMMMMMMM MMMMMMMMMM
////////// MMMMMMMMM MMMMMMMMMM
///////// MMMMMMMMM MMMMMMMMM
//////// MMMMMMMMM MMMMMMMMM
//////// MMMMMMMMM MMMMMMMM
//////// ///////// MMMMMMMMM MMMMMMMM
//////// ///////// MMMMMMMMM MMMMMMMMM
///////// //////// MMMMMMMMM MMMMMMMMM
///////// ///////// MMMMMMMMM MMMMMMMMMM
////////// ////////// MMMMMMMMMM MMMMMMMMMM
//////////// ///////////// MMMMMMMMMMMMMMMMMMMMMMMMMM
///////////////////////// MMMMMMMMMMMMMMMMMMMMMMMMM
//////////////////////// MMMMMMMMMMMMMMMMMMMMMMMM
/////////////////////// MMMMMMMMMMMMMMMMMMMMMM
///////////////////// MMMMMMMMMMMMMMMMMMMM
/////////////////// MMMMMMMMMMMMMMMMMM
//////////////// MMMMMMMMMMMMMMMM
///////////// MMMMMMMMMMMM
//////// MMMMMMMM



$$$$$$ $$$$$$ $$ $$
$$$$$$$$$ $$$$$$$$$ $$ $$
$$$ $$$ $$ $$ $$$ $$$
$$ $$ $$ $$ $$ $$$
$$ $$ $$$$$$$ $$$$$$ $$$$$$ $$ $$ $$
$$ $$ $$ $$ $$ $$ $$$ $$ $$ $$$ $$$
$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$$
$$ $$ $$ $$ $$$$$$$ $$ $$ $$ $$ $$
$$ $$ $$ $$ $$ $$ $$ $$ $$ $$$ $$
$$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$$$$
$$$$$$$$$$ $$$ $$$ $$$ $$$ $$ $$ $$$$$$$$$ $$$$
$$$$$$$$ $$$$$$ $$$$$ $$ $$ $$$$$$$ $$$$
$$
$$
$$

要看 img2char 指令說明可以後面接上 -h--help 參數,如下所示

1
$ python3 img2char.py -h

看起來效果相當地不錯!
如果Github的星星數破100的話,我再來寫個加強版與惡搞版XD~

其它相關文章推薦
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV resize 圖片縮放
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 影像二值化 Image Thresholding