使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

这篇具有很好参考价值的文章主要介绍了使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇博客将介绍如何使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓。

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

1. 效果图

选了我最爱的小林老师的漫画图~
纵有千种风情,更与谁人说。

端午粽子原始图VS素描图:
使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓
端午粽子词云图如下:
使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

默认彩色词云图 VS自定义灰色词云图 VS 端午粽子原图(背景色、轮廓线、轮廓颜色、词云颜色均可配置)
背景色白色 轮廓线红色 轮廓线宽度5,词云彩色及灰色
使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

设置词云黑色背景

使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

龙舟原图VS字符画
使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

字符画

使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓
端午粽子轮廓提取(抠图),并分别用白色黑色做背景色,也可以是其他色彩做背景色
使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

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

使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

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

使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓文章来源地址https://www.toymoban.com/news/detail-479466.html

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.2 优化版:制作不同风格的素描图(正常,漫画,写实风格)

2.3 词云图源码

# 彩色端午粽子图
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.4 字符画源码

#-*- 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.5 端午粽子轮廓提取

# 进行端午粽子轮廓的提取
# 并分别生成黑色 & 白色背景的端午粽子图片
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()

参考

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

到了这里,关于使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 端午节粽子(python)

    目录 前言 正文  粽叶绘制 粽叶绳绘制 祝福语绘制 源代码  总结 今天端午节,然后昨天也学习一下绘图的相关知识,然后就想看一下能不能画一下,结果还是有点困难的,用CharAI生成简直一言难尽了。后面是找了一个改了一下。 端午安康,用python给你画盘粽子~啾啾_python画

    2024年02月10日
    浏览(29)
  • 【AI绘画打卡】| 用漫画生成器绘制宅男最爱的二次元美女

    二次元美女在日本文化中已经成为一种流行文化和艺术形式,包括漫画、动画等。由于此类作品的富有想象力、多样性和虚构,像二次元美女这样的虚拟角色往往可以充分满足人们的幻想和情感需求。这也是许多宅男在二次元世界寻找自己理想女友的原因之一。 作品参考(附

    2024年02月11日
    浏览(39)
  • 生成艺术:使用Python与深度学习创作个性化AI漫画

    生成AI漫画是一个非常有趣且创意的项目,它涉及到深度学习、图像处理和创意生成等领域的结合。在本篇博客中,我将向你介绍如何使用Python和一些流行的深度学习库来生成AI漫画。 在开始之前,我们需要安装以下库: TensorFlow :一个用于构建和训练深度学习模型的强大库

    2024年02月10日
    浏览(31)
  • Python使用AI photo2cartoon制作属于你的漫画头像

    官方效果图如下: 效果图1如下: 效果图2如下: 效果图3如下: 人像卡通风格渲染的目标是,在保持原图像 ID 信息和纹理细节的同时,将真实照片转换为卡通风格的非真实感图像。 但是图像卡通化任务面临着一些难题: 卡通图像往往有清晰的边缘,平滑的色块和经过简化的

    2024年02月02日
    浏览(61)
  • 端午节使用Threejs实现数字人3D粽子

    个人主页: 左本Web3D,更多案例预览请点击==》 在线案例 个人简介:专注Web3D使用ThreeJS实现3D效果技巧和学习案例 💕 💕积跬步以至千里,致敬每个爱学习的你。喜欢的话请三连,有问题请私信或者加微信   1,功能介绍 Threejs实现加载粽子模型,使用AI生成数字人并进行介

    2024年02月16日
    浏览(28)
  • Python使用AI animegan2-pytorch制作属于你的漫画头像/风景图片

    官方效果图如下: 效果图v2 512模型如下: 效果图v1 512模型如下: 效果图v1 效果不太好如下: 效果图rece如下 人物会有一种病态的美,过于白了,风景上效果更好一些; 人物与photo2cartoon的效果图有点像; 效果图paprika 模型如下 人物纹理痕迹太过明显,更适合风景 下一张明兰

    2024年01月24日
    浏览(32)
  • python代码写开心消消乐

    ♥️ 作者:小刘在C站 ♥️ 个人主页:小刘主页 ♥️ 每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 目录 一.python是什么 二.游戏代码效果呈现

    2024年02月02日
    浏览(22)
  • 【附源码】Python小游戏 ——开心消消乐

    目录 前言 开发工具 环境搭建 效果展示 选择关卡首页 游戏界面  过关   代码展示 模块导入 主函数 声音类 树类 元素类 数组类 今天主要是给大家拿牌一个小游戏,开心消消乐 看看有没有小伙伴能够通过呀 Python版本:3.7.8 相关模块: pygame模块; manager模块; sys模块; 以及

    2024年02月11日
    浏览(51)
  • 毕业设计 python消消乐小游戏

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 消消乐小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取: htt

    2024年02月21日
    浏览(38)
  • Python消消乐小游戏(全代码分享)

    准备三张图片,分别命名为 三张照片和程序放在同一文件下,否则的话需要使用绝对路径引用。 我这里三张图片的样子为: 这个消消乐游戏的玩法很简单。游戏界面上会有一些方块,你需要通过交换相邻方块的位置,使得三个或三个以上相同颜色的方块连在一起。 请注意,

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包