失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 小姐姐一键素描 词云生成。

小姐姐一键素描 词云生成。

时间:2021-11-29 11:50:44

相关推荐

小姐姐一键素描 词云生成。

目录

前言图片二值化与上色词云的生成小姐姐变素描

前言

不多说了,先上图片

这个呢就是我们处理后的图片,至于为什么是绿色的,这个其实也可以改,但是这里的话因为还涉及到词云的效果,所以我处理后的图片是绿色的。

图片二值化与上色

由于一张图片的干扰因素太多,所以这里的话不得不先进行二值化处理,也就就是前言里面看到的那一张黑色图片。

代码如下:

image=image.convert('L')t=[]for i in range(256):#杂质越多,值越大(轮廓越黑越明显)if i<80:#160t.append(0)else:t.append(1)image=image.point(t,'1')

处理之后就是一张黑白图片,这样做的好处是为了方便二次上色。

现在我们,对其进行二次上色,把图片变成绿色的。

#这里定义了一个函数,默认是绿色的图片。def chang_rgb(path,save_path,rgb_change=(50,205,50),show_yes=1):im = Image.open(path)width = im.size[0]height = im.size[1]new_image = Image.new("RGB",(width,height))im = im.convert('RGB')# array = []for x in range(width):for y in range(height):r, g, b = im.getpixel((x,y))rgb = (r, g, b)if rgb == (0,0,0):rgb=rgb_changenew_image.putpixel((x, y), (int(rgb[0]), int(rgb[1]), int(rgb[2])))#画图#要不要展示图片new_image.save(save_path)if show_yes:new_image.show()

词云的生成

这个其实就分为两个部分,第一个是词的获得,这个有两种途径,一个是爬虫爬取文本,另一个就是自备文本。这里就不展示数据获取了。爬虫这玩意感兴趣的去我前面的博客翻翻。

import jiebafrom matplotlib import pyplot as pltfrom wordcloud import WordCloudfrom PIL import Imageimport numpy as npdef get_worlds(path):string = ''with open(path, 'r', encoding='utf-8') as f:while 1:x = f.read(1)if x:if x == '\n':passelse:string += xelse:f.close()breakcut = jieba.cut_for_search(string) # 分词string = ' '.join(cut)return string

def Making(img_path,text_path,save_path):path_ = text_pathstring =get_worlds(path_)print(len(string))img = Image.open(img_path) # 打开图片img_array = np.array(img) # 将图片装换为数组stopword = [' '] # 设置停止词,也就是你不想显示的词,这里这个词是我前期处理没处理好,你可以删掉他看看他的作用wc = WordCloud(background_color='white',width=1200,height=1600,mask=img_array,font_path=font,stopwords=[' '],max_words=300,max_font_size=60,random_state=30)wc.generate_from_text(string) # 绘制图片plt.imshow(wc)plt.axis('off')plt.figure()plt.show() # 显示图片wc.to_file(save_path) # 保存图片

之后就是调用,就不用多说了。

简单说一说为什么是绿色图片,原因很简单,鄙人亲测,这玩意单纯的使用二值图片是不行的。至于能不能使用其他的颜色,这个我没有具体测试过,感兴趣的可以去试试。

小姐姐变素描

这个其实也不算是素描,其实就是对轮廓进行提取。好处是,可以直接提取轮廓,在本地而不需要去调取人家写好的api虽然说,精度可能感人,但是绝对是可以使用的。

具体的思路就是先判断像素点的RGB值如果上面的像素点是白的,下面是绿的,或者上面是绿的下面是白的那么显然这就是一条轮廓,如果像素点上一个与下一个都是绿色的那么就不是轮廓边缘,修改rgb值为白色

下面上代码。

修改图片为二值化处理。

前面有不重复了

修改图片为RGB打开

#提供尺寸修改,默认修改为500x500#不该就填写值为0def pic_change(path,comm):image1 = Image.open(path)print(image1.size)if comm:image1 = image1.resize((500,500))else:image1 = image1.resize((image1.size[0],image1.size[1]))image1 = image1.convert("RGB")return image1

轮廓提取。

def Get_outline(path,save_path,yes_show=1):image = pic_change(path,0)new_img=Image.new("RGB",(image.size[0],image.size[1]))for x in range(image.size[0]):for y in range(image.size[1]):r,g,b=image.getpixel((x,y))rgb = (r, g, b)if rgb!=(255,255,255):if y>2 and y<image.size[1]-3:r1,g1,b1=image.getpixel((x,y-3))rgb1=(r1,g1,b1)r2, g2, b2 = image.getpixel((x,y+3))rgb2 = (r2, g2, b2)if rgb1 ==(255,255,255) and rgb ==(50,205,50) and rgb2 ==(20,205,50):rgb=(50,205,50)elif rgb1 ==(20,205,50) and rgb ==(50,205,50) and rgb2 ==(255,255,255):rgb = (50, 205, 50)if rgb1 ==(50,205,50) and rgb ==(50,205,50) and rgb2 ==(50,205,50):rgb=(255,255,255)new_img.putpixel((x,y),(int(rgb[0]), int(rgb[1]), int(rgb[2])))new_img.save(save_path)if yes_show:new_img.show()

接下来对图片测试一下,我们换风景图片测试。也就是这张图片像素复杂一点的。

效果,看起来还行。

如果觉得《小姐姐一键素描 词云生成。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。