这篇博客将介绍如何使用Python绘制6.1儿童节消消乐,素描图,词云图,字符画图,提取轮廓图及蒙太奇效果图。

使用Python绘制端午dragboat消消乐 美轮美奂的界面效果

1. 效果图

6.1儿童节快乐原始图VS素描图:


素描进阶(正常,漫画,写实风格):

6.1儿童节快乐词云图如下:

默认彩色词云图 VS自定义灰色词云图 VS 端午粽子原图(背景色、轮廓线、轮廓颜色、词云颜色均可配置)
背景色白色 轮廓线红色 轮廓线宽度5,词云彩色及灰色

设置词云黑色背景

6.1儿童节快乐原图VS字符画

字符画

6.1儿童节快乐轮廓提取(抠图),并分别用白色黑色做背景色,也可以是其他色彩做背景色

轮廓提取过程图,灰度图 & 阈值化图如下

原始图像上绘制提取的轮廓

蒙太奇效果图如下:
将图片以任意几行几列排列展示,不足的部分补充默认黑色空白图片

2. 源码

2.1 素描图源码

# 素描图import cv2
import imutilsdef make_sm(before_path, after_path):# 加载图片origin = cv2.imread(before_path)origin = imutils.resize(origin, width=500)cv2.imshow("origin", origin)# 转为灰度图img_gray = cv2.cvtColor(origin, cv2.COLOR_RGB2GRAY)# 对图片进行高斯模糊,参数ksize表示高斯核的大小,sigmaX和sigmaY分别表示高斯核在 X 和 Y 方向上的标准差img_blur = cv2.GaussianBlur(img_gray, ksize=(21, 21), sigmaX=0, sigmaY=0)# 对原图和模糊图像进行融合,cv2.divide()本质上进行的是两幅图像素级别的除法操作,其得到的结果可以简单理解为两幅图之间有明显差异的部分divide = cv2.divide(img_gray, img_blur, scale=255)cv2.imshow("after", divide)cv2.waitKey(0)# 保存结果cv2.imwrite(after_path, divide)if __name__ == '__main__':before_path = 'imgs/xrr.jpg'after_path = 'imgs/xrr.jpg'make_sm(before_path, after_path)

2.1 素描进阶(正常,漫画,写实风格)

2.2 词云图源码

# 彩色端午粽子图
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import osfrom wordcloud import WordCloud, STOPWORDS, ImageColorGenerator# 获取数据目录
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()# 读取填充的文本
text = open(path.join(d, 'imgs/word.txt'),mode='r',encoding='utf-8').read()# 读取masked原图彩色图像
alice_coloring = np.array(Image.open(path.join(d, 'imgs/bdd_.jpg')))
stopwords = set(STOPWORDS)
stopwords.add("said")# 背景色
# 字体大小 轮廓颜色 轮廓宽度
wc = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,stopwords=stopwords, max_font_size=40, random_state=42,contour_width=5,contour_color="blue")
# 生成词云
wc.generate(text)# 创建图片颜色
image_colors = ImageColorGenerator(alice_coloring)# 展示图像
fig, axes = plt.subplots(1, 3)
axes[0].imshow(wc, interpolation="bilinear")
# 重新填充颜色并展示
# 也可以在构造函数里进行颜色赋值
axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
axes[2].imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
for ax in axes:ax.set_axis_off()
plt.show()

2.3 字符画源码

#-*- coding=utf-8 -*-
# 字符画
from PIL import ImageIMG = 'imgs/bx.jpg'      #设置图片文件
WIDTH = 75     #设置字符画的宽
HEIGHT = 40     #设置字符画的高
OUTPUT = 'imgs/bx.txt'      #设置存放字符画的文本文件
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")    #设置显示的字符集#将256灰度映射到70个字符上
def get_char(r,g,b,alpha = 256):#alpha为透明度# 判断 alpha 值,为0表示全透明if alpha == 0:return ' '# 获取字符集的长度,这里为 70length = len(ascii_char)# 将 RGB 值转为灰度值 gray,灰度值范围为 0-255gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)# 灰度值范围为 0-255,而字符集只有 70# 需要进行如下处理才能将灰度值映射到指定的字符上#防止当灰度值为255时,输出的第70个字符超出列表索引,所以需要将(255+1)unit = (255.0 + 1)/length# 返回灰度值对应的字符return ascii_char[int(gray/unit)]if __name__ == '__main__':# 打开并调整图片的宽和高im = Image.open(IMG)im = im.resize((WIDTH,HEIGHT), Image.NEAREST)# 初始化输出的字符串txt = ""# 遍历图片中的每一行for i in range(HEIGHT):# 遍历该行中的每一列for j in range(WIDTH):# 将 (j,i) 坐标的 RGB 像素转为字符后添加到 txt 字符串txt += get_char(*im.getpixel((j,i)))# 遍历完一行后需要增加换行符txt += '\n'# 输出到屏幕print(txt)with open(OUTPUT,'w') as f:f.write(txt)

2.4 6.1儿童节轮廓提取

# 进行端午粽子轮廓的提取
# 并分别生成黑色 & 白色背景的端午粽子图片
import argparseimport cv2
import imutils
import numpy as np# 构建命令行参数及解析
# --image 输入图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=False, default='imgs/bx.jpg',help="path to input image(bdd or xrr or both)")
args = vars(ap.parse_args())image = cv2.imread(args["image"])
image = imutils.resize(image, width=400)
origin = image.copy()
cv2.imshow("origin", image)# 转换灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray1 = gray.copy()
cv2.imshow("gray", gray)
gray = gray - 65  # 整体亮度调整下,方便提取# 应用一系列腐蚀膨胀
for i in range(0, 8):dilated = cv2.erode(gray.copy(), None, iterations=i + 1)
for i in range(0, 3):dilated = cv2.dilate(dilated, None, iterations=i + 1)# 预处理以便将前景与背景分割开来
# 检测是该用阈值还是模糊预处理步骤
# 高斯模糊处理以减少高频噪声
blurred = cv2.GaussianBlur(dilated, (5, 5), 0)
# cv2.imshow("blurred", blurred)thresh = cv2.threshold(blurred, 180, 255, cv2.THRESH_BINARY_INV)[1]
cv2.imshow("thresh", thresh)# # 构建矩形内核,并执行闭合操作
# kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15))
# closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
# cv2.imshow("closing", closing)
# cv2.waitKey(0)cnts = cv2.findContours(thresh, 1, 2)
cnts = imutils.grab_contours(cnts)# 轮廓面积排序只保留最大的
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:1]# 分别生成黑色背景端午粽子,白色背景端午粽子
mask_black = np.zeros(image.shape[:2], dtype="uint8")
mask_white = np.ones(image.shape[:2], dtype="uint8")
for i, cnt in enumerate(cnts):# 在图像上绘制轮廓cv2.drawContours(image, [cnt], -1, (0, 0, 0), 3)cv2.drawContours(mask_black, [cnt], -1, (255, 255, 255), -1)cv2.drawContours(mask_white, [cnt], -1, (100, 100, 100), -1)cv2.imwrite(str(args['image'].replace('.jpg', '_mask.jpg')), image)cv2.imshow("origin_res", image)
cv2.imshow("mask_black", mask_black)
cv2.imshow("mask_white", mask_white)
# 应用掩码图像
masked_black = cv2.bitwise_and(origin, origin, mask=mask_black)
masked_white = cv2.bitwise_or(origin, origin, mask=mask_white)
cv2.imshow("masked_black", masked_black)
cv2.imshow("masked_white", masked_white)
cv2.imwrite(str(args['image'].replace('.jpg', '_black.jpg')), masked_black)
cv2.imwrite(str(args['image'].replace('.jpg', '_white.jpg')), masked_white)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.5 蒙太奇效果图源码

参考

  • https://blog.csdn.net/u010410697/article/details/118576619?spm=1001.2014.3001.5502
  • http://amueller.github.io/word_cloud/auto_examples/colored.html

使用Python绘制6.1儿童节消消乐,素描图,词云图,字符画图,提取轮廓图及蒙太奇效果图相关推荐

  1. 用python绘制好看的图形_如何使用Python绘制好word cloud,怎么,画出,好看,的,词,云图...

    下面记录一下python作图做了一个学期依然是个菜鸡的一些操作: ** 1.导入库 ** import jieba from wordcloud import WordCloud import mat ...

  2. python绘制影像组学训练集、测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图)

    python绘制影像组学训练集.测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图) # 所有数据的瀑布图 tagets_all = df['label'] tagets_all = df. ...

  3. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)

    python爬取网页版QQ空间,生成词云图.柱状图.折线图 最近python课程学完了,琢磨着用python点什么东西,经过一番搜索,盯上了QQ空间,拿走不谢,欢迎点赞收藏,记得github给个sta ...

  4. python爬取《三国演义》小说统计词频生成词云图

    python爬取<三国演义>小说&统计词频&生成词云图 注意点: 爬取小说正文时用的正则表达式涉及到多行匹配.需要开启多行模式(?s) book_content_re = ...

  5. python 引入同一路径的类_Python实现Wordcloud生成词云图的示例

    wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前 ...

  6. python 之pyecharts画图:最全地图,词云图,世界地图,省份图,区县图

    python最全画地图,可视化数据,pyecharts画图: https://www.jianshu.com/p/e0b2851672cd Python强大的pyecharts绘画优美图形<二& ...

  7. Python——爬取某瓣电影评论信息并生成词云图

  8. Python爬取哔哩哔哩弹幕并且造词云图简单版!!!

    一,操作步骤 1.通过浏览器打开哔哩哔哩 2.选择一个播放量较合适的视频(不要太大也不要太小 大概就50万的样子)比如我用的是:https://www.bilibili.com/video/BV1th ...

  9. python爬取弹幕读取csv文件制作弹幕热点词云图-万恶之源马老师-后裔弃兵

    文章目录 1.后裔弃兵 2.万恶之源弹幕 python3.8 jupyter notebook 1.后裔弃兵 <后翼弃兵>豆瓣短评数据集 import pandas import csv ...

最新文章

  1. 开源组织:Datawhale
  2. HDU(1856),裸的带权并查集
  3. “远程服务器返回错误: (404) 未找到”的正确解决方法
  4. 教程-Delphi调用百度地图API(XE8+WIN7)
  5. 转:SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势
  6. 物理实验计算机仿真单摆实验,大学物理实验仿真实验实验报告.doc
  7. Linux/Ubuntu 安装与单机配置hadoop
  8. centos 6.8 升级mysql_centos6.8 Mysql5.6.22 升级 mysql-5.7.20
  9. markDown用这一招实现图片并排显示
  10. 随机过程之更新理论的应用
  11. 2010年8月初 泉州将地震 预言还是谣言?
  12. 多关键词匹配个人解决方案
  13. 用于退出access的宏命令是_宏操作QuitAccess的功能是什么
  14. 360企业安全校招内推(可免笔试)
  15. 在canvas画布上多次绘制图形叠加的效果
  16. 谁说程序员年龄大了,就没出路了?
  17. PBox 基于 Dll 动态库窗体的模块化开发平台 (已开源)
  18. python 网站爬虫 下载在线盗墓笔记小说到本地的脚本
  19. [deviceone开发]-doSpace应用源码开源 1
  20. 目前消防信息化建设采用的服务器类型,智慧消防整体解决方案(1).doc

热门文章

  1. macOS 软件推荐避雷指南 - 让 mac 更像 windows 的装机必备软件
  2. CAD制图教程:多跑楼梯对话框控件说明及工程实例
  3. Android-Window和WindowManager
  4. onnx模型修改输入维度
  5. 通过模糊测试寻找车载蓝牙的安全漏洞
  6. 江苏大学考研计算机专业目录,江苏大学考研专业目录
  7. 手机的重要性手机病毒如何防,六招远离手机病毒技巧分享
  8. 台式计算机如何增加蓝牙,台式电脑怎么连蓝牙耳机(教你简单的连接技巧)
  9. 使用免费组件给PDF文档添加文本和图片页眉
  10. 我们和 Flutter Create 全球大奖得主喝了一杯功夫茶