1. 程式人生 > >灰度圖、二值圖與詞雲圖—聖誕節案例

灰度圖、二值圖與詞雲圖—聖誕節案例

聖誕節小案例

目錄

在菜鳥學python中看到一篇推文,教大家生成不同的圖片,灰度圖、二值圖、詞雲的生成、字元圖和gif動圖
用Python畫聖誕老人的N種方法.

灰度圖

原圖
原圖

# 灰度圖
from PIL import Image
img = Image.open(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽.jpg')
img = img.
convert('L') img.save(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽灰度圖.jpg')

在這裡插入圖片描述

二值圖

#二值圖
from PIL import Image
img = Image.open(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽.jpg')
img = img.convert('1')
img.save(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽二值圖.jpg')

在這裡插入圖片描述
可以看到灰度圖和二值圖的程式碼只有在img.convert(‘L’) img.convert(‘1’)

部分有區別,不禁想到是不是還有其他的生成方式。於是百度了下Image模組的convert()函式。發現果然還有其他的模式

PIL中有九種不同模式。分別為1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

詞雲圖

#詞雲
import jieba
import re
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
word_list = []
with open(r'C:\Users\hao\Desktop\程式設計\趣味案例\十九大報告全文.txt'
) as f: words = f.read() words = " ".join(jieba.cut(words)) # join()表示將字串以指定的形式連成新字串 這裡以 " " 的形式連線,即空格 #print(words) for word in words.split(): #split() 以()內的形式 分割指定專案,這裡是 空格 形式 word = re.sub(r'[A-Za-z0-9\!\%\[\]\,\。“”,’‘、:?—!]','',word) #print(word) word_list.append(word) words = ' '.join(word_list) backgroud_image = plt.imread(r'C:\Users\hao\Desktop\程式設計\趣味案例\1.jpg') wc = WordCloud(font_path='msyh.ttf', mask=backgroud_image, background_color='white', max_words=1000) my_wc = wc.generate_from_text(words) image_colors = ImageColorGenerator(backgroud_image) plt.imshow(my_wc.recolor(color_func=image_colors), ) plt.axis('off') my_wc.to_file(r'C:\Users\hao\Desktop\程式設計\趣味案例\1聖誕帽詞雲圖.jpg')

在這裡插入圖片描述
以下為新模組和新函式的學習:

jieba

jieba.cut()使用Jieba工具中文分詞及文字聚類概念

#encoding=utf-8
import jieba

#全模式
text = "我來到北京清華大學"
seg_list = jieba.cut(text, cut_all=True)
print u"[全模式]: ", "/ ".join(seg_list) 

#精確模式
seg_list = jieba.cut(text, cut_all=False)
print u"[精確模式]: ", "/ ".join(seg_list)

#預設是精確模式
seg_list = jieba.cut(text)
print u"[預設模式]: ", "/ ".join(seg_list) 

#新詞識別 “杭研”並沒有在詞典中,但是也被Viterbi演算法識別出來了
seg_list = jieba.cut("他來到了網易杭研大廈") 
print u"[新詞識別]: ", "/ ".join(seg_list)

#搜尋引擎模式
seg_list = jieba.cut_for_search(text) 
print u"[搜尋引擎模式]: ", "/ ".join(seg_list)

執行結果

re.sub()

re.sub 詳解Python中re.sub–轉載

re.sub共有五個引數。
其中三個必選引數:pattern, repl, string
兩個可選引數:count, flags

程式碼彙總

# 灰度圖
from PIL import Image
img = Image.open(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽.jpg')
img = img.convert('L')
img.save(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽灰度圖.jpg')

#二值圖
from PIL import Image
img = Image.open(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽.jpg')
img = img.convert('1')
img.save(r'C:\Users\hao\Desktop\程式設計\趣味案例\聖誕帽二值圖.jpg')

#詞雲
import jieba
import re
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
word_list = []
with open(r'C:\Users\hao\Desktop\程式設計\趣味案例\十九大報告全文.txt') as f:
	words = f.read()
words = " ".join(jieba.cut(words)) #  join()表示將字串以指定的形式連成新字串 這裡以 " " 的形式連線,即空格
#print(words)
for word in words.split():  #split() 以()內的形式 分割指定專案,這裡是 空格 形式
	word = re.sub(r'[A-Za-z0-9\!\%\[\]\,\。“”,’‘、:?—!]','',word)
	#print(word)
	word_list.append(word)
words = ' '.join(word_list)

backgroud_image = plt.imread(r'C:\Users\hao\Desktop\程式設計\趣味案例\1.jpg')
wc = WordCloud(font_path='msyh.ttf', mask=backgroud_image,
				background_color='white', max_words=1000)
my_wc = wc.generate_from_text(words)
image_colors = ImageColorGenerator(backgroud_image)
plt.imshow(my_wc.recolor(color_func=image_colors), )
plt.axis('off')
my_wc.to_file(r'C:\Users\hao\Desktop\程式設計\趣味案例\1聖誕帽詞雲圖.jpg')