日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图片处理拓展篇 : 图片转字符画(ascii)

發(fā)布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片处理拓展篇 : 图片转字符画(ascii) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先要明確思路, 圖片是由像素組成的, 不同的像素有不同的顏色(rgb), 那么既然我們要轉(zhuǎn)化為字符畫, 最直接的辦法就是利用字符串來替代像素, 也就是用不同的字符串來代表不同的像素. 另外圖片一般來講是彩色的, 而acsii(一般打印在終端上吧) 都是黑白的, 此時就要介紹另外一個概念了 :

灰度值:指黑白圖像中點的顏色深度,范圍一般從0到255,白色為255,黑色為0,故黑白圖片也稱灰度圖像.

到這里思路就很明確了, 我們要做的就是兩件事 :

1. 將每一個像素點(彩色圖片用rgb)映射到每一個灰度值...

2. 將灰度值映射到每一個字符串...

所以我們還需要從像素點的rgb到灰度值的轉(zhuǎn)換公式 : ?灰度值 = 0.2126 * r + 0.7152 * g + 0.0722 * b.

?

代碼如下 :

1 from PIL import Image 2 3 ascii_chars = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.") #用來替代像素的字符集合... 4 5 def get_chars(r, g, b, alpha = 256): 6 global ascii_chars 7 if alpha == 0: 8 return ' ' 9 length = len(ascii_chars) 10 gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) 11 unit = alpha / length #將256個像素均分給字符... 12 return ascii_chars[int(gray/unit)] 13 14 15 16 imagePath = "/Users/zhangzhimin/ascii_dora.png" 17 outPutHeight = 70 18 outPutWidth = 100 19 20 21 img = Image.open(imagePath) 22 img = img.resize((outPutWidth, outPutHeight)) 23 24 25 txt = "" 26 for y in range(outPutHeight): 27 for x in range(outPutWidth): 28 txt += get_chars(*img.getpixel((x, y))) 29 txt += '\n' 30 31 print(txt)

?

效果大概是這樣的 :?

?

值得一提的是只對一些層次簡單的圖形會有很好的效果, 如果想要解析復(fù)雜的圖片建議增加字符串的個數(shù)以及顯示屏的大小...

感謝實驗樓提供這樣一個有趣的編程練習(xí)...

轉(zhuǎn)載于:https://www.cnblogs.com/nzhl/p/5599346.html

總結(jié)

以上是生活随笔為你收集整理的图片处理拓展篇 : 图片转字符画(ascii)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。