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

news2024/11/26 20:42:39

这篇博客将介绍如何使用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 imutils

def 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 os

from 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 Image

IMG = '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 ' '

    # 获取字符集的长度,这里为 70
    length = len(ascii_char)
    # 将 RGB 值转为灰度值 gray,灰度值范围为 0-255
    gray = 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 argparse

import 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内网穿透-公网ip-方法总结-访问内网服务器-frp-虚拟服务器

文章目录 1.固定IP2.虚拟服务器转发3.IP盒子4.总结 1.固定IP 第一种方式是向三大电信服务商购买专用通道&#xff0c;固定IP&#xff0c;这种方式是最正统&#xff0c;也是各大虚拟服务器服务商采用的方式&#xff0c;宽带带宽有稳定的保障。在访问量不足的前提下&#xff0c;…

anaconda 安装_Linux系统上

安装流程 1 下载安装包 官网 https://www.anaconda.com/download#downloads 2 执行安装 bash Anaconda3-2021.11-Linux-x86_64.sh3 安装过程 一路enteryes&#xff0c;接受licence、指定安装路径和init之后安装完成。 检验anaconda是否安装成功。 conda --version或 con…

【LeetCode】12,整数转罗马数字。 难度等级:中等。易错点:使用 python 字典构建哈希表时要考虑哈希表是否有序

文章目录 一、题目二、我的解法&#xff1a;基于有序哈希表的贪心算法2.1 使用 dict 构建哈希表2.2 使用两个 list / tuple 构建有序哈希表 一、题目 二、我的解法&#xff1a;基于有序哈希表的贪心算法 2.1 使用 dict 构建哈希表 贪心法则&#xff1a;我们每次尽量使用最大的…

基于AT89C52单片机的多功能万年历设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87853675 源码获取 目 录 摘 要 1 1 方案论证 2 1.1 单片机芯片的选择方案和论证 2 1.2 显示模块选择方案和论证 2 1.3 时钟芯片的选择方案和论证 3 1.4 电路设计…

BitLocker加密卷“恢复密钥(数字密码)”提取还原

BitLocker是微软Windows自带的用于加密磁盘分卷的技术。 通常&#xff0c;解开后的加密卷通过Windows自带的命令工具“manage-bde”可以查看其恢复密钥串&#xff0c;如下图所示&#xff1a; 如图&#xff0c;这里的数字密码下面的一长串字符串即是下面要提取恢复密钥。 在计…

IMA/EVM完整性检测代码分析

IMA/EVM完整性检测 IMA&#xff08;Integrity Measurement Architecture&#xff09;是一个内核安全子系统&#xff0c;用于检测文件或数据的完整性和安全性。IMA的hook机制指的是内核接口钩子&#xff08;kernel interface hooks&#xff09;&#xff0c;用于向IMA注册和实现…

第三章 部署Web及WDS服务

♥️作者介绍&#xff1a;奇妙的大歪 ♥️个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01; ♥️个人简介&#xff1a;云计算网络运维专业人员 目录 一.什么是web 1.www(world wide web)万维网 世界 维度 2.www服务软件 3.info…

ElementUI-Form表单二次封装

一、Form组件二次封装考虑组件构成&#xff1a; form组件&#xff1a;input text passworldselectcheckboxradio文本域日期 二、实现Form表单的二次封装&#xff1a; 1. 分析出对应的位置 开始抽离组件 2. 如果需要产生多个form表单&#xff0c;则需要产生多个el-form-item…

学习路之gis--百度离线地图下载制作

在有些情况下需要使用地图&#xff0c;但又不能访问外网&#xff0c;这时你需要一个离线地图。本文介绍如何制作百度离线地图。 下面将介绍如何实现一个离线版百度地图&#xff1a; 1. 下载百度地图瓦片 下载网址&#xff1a;望远网-百度地图下载 首先需选择下载地图瓦片的样式…

BUG: scheduling while atomic: fpv_cams/605/0x00010001

IIO框架下IMU驱动的接口在定时器中断内调用报错&#xff0c;因调用IO读定时间较长会导致睡眠的发生&#xff0c;因为内核总是崩。 尝试了几种解决方法&#xff1a; 1.在IIO框架里&#xff0c;使用 spidev 的接口来读写&#xff0c;错误依旧&#xff1b; 2.去掉IIO框架&#x…

香橙派One(全志H3芯片)编译烧写U-boot、Linux内核zImage、dtb

一、编译烧写u-boot 1.1 源码和工具下载&#xff1a; 香橙派提供了u-boot源码和交叉编译链工具&#xff1a; &#xff08;1&#xff09;u-boot&#xff08;2020.04&#xff09;下载地址&#xff1a;https://github.com/orangepi-xunlong/u-boot-orangepi &#xff08;2&#…

MyBatis - MyBatis Generator

文章目录 1.什么是 MyBatis Generator2.使用 MyBatis Generator2.1 导入依赖2.2 application 配置2.3 添加 Java 配置2.4 MBG 配置2.5 生成代码2.6 基本 CRUD 操作 3.进阶使用 MyBatis Generator3.1 基于条件的 CRUD3.2 子查询、Group 与 Join 查询3.3 一对一查询、一对多查询 …

ANSYS Workbench中的网格优化方法

自 50 年代后期以来&#xff0c;有限元法 (FEM) 已被用作解决工程问题的强大工具。当时的计算是手工进行的&#xff0c;该方法是基于力的&#xff0c;而不是我们今天使用的基于位移的方法。由于计算机工业的进步&#xff0c;已经开发出各种有限元商业软件。Ansys 可以被认为是全…

Nginx网站部署

Nginx网站部署 一、访问状态统计配置二、基于授权的访问控制三、基于客户端的访问控制四、基于域名的 Nginx 虚拟主机五、基于IP 的 Nginx 虚拟主机六、基于端口的 Nginx 虚拟主机 一、访问状态统计配置 1.先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包…

常用抓包工具使用-wireshark使用(二)

常用抓包工具使用-wireshark使用&#xff08;二&#xff09; 文章目录 常用抓包工具使用-wireshark使用&#xff08;二&#xff09;前言一、wireshark安装1.1 windows安装1.2 mac安装 二、wireshark抓包和过滤2.1 打开Wireshark2.2 选择网络接口&#xff1a;2.3 wireshark抓包页…

【Nginx 网络服务】

目录 一、Nginx和Apache的优点和缺点二、编译安装Nginx服务1.关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2.安装依赖包3.创建运行用户、组4.编译安装Nginx5.检查、启动、重启、停止 nqinx服务 三、认识Nginx服务的主配置文件 nginx.conf1、系统文件支持数量2&a…

商场内怎么导航?商场导航图怎么画?

商场内怎么导航&#xff1f;大型购物商场是目前一二线城市最常见的购物场所&#xff0c;占地面积较大&#xff0c;布局错综复杂&#xff0c;商品比较齐全&#xff0c;如果没有商场地图导航&#xff0c;会导致新顾客难以找到想要的商品&#xff0c;那么大型购物商场商场地图怎么…

索引特性.

目录 没有索引&#xff0c;可能会有什么问题认识磁盘MySQL与存储先来研究一下磁盘在看看磁盘中一个盘片扇区定位扇区结论磁盘随机访问(Random Access)与连续访问(Sequential Access) MySQL 与磁盘交互基本单位建立共识索引的理解建立测试表插入多条记录查看插入结果中断一下---…

打跑个人开源转角的“拦路虎”——我的开源之路

从参与Apache 开源项目&#xff0c;到凭借业务需求独自开发个人开源项目&#xff1b;从项目开源出来无人问津到至今500star&#xff0c;多个企业级用户&#xff0c;在开源过程中&#xff0c;我也从走过低谷&#xff0c;一度想过放弃&#xff0c;但仍然选择坚持至今日。 这一路…

Data Distillation: A Survey

本文是蒸馏学习综述系列的第二篇文章&#xff0c;Data Distillation: A Survey的一个翻译 数据蒸馏&#xff1a;综述 摘要1 引言2 数据蒸馏框架2.1 元模型匹配的数据蒸馏2.2 梯度匹配的数据蒸馏2.3 轨迹匹配的数据蒸馏2.4 分布匹配的数据蒸馏2.5 因式分解的数据蒸馏 3 数据模态…