python turtle画海绵宝宝,python还能这么玩?帅呆了

2023-11-08

漫威还是DC?

超人或者蝙蝠侠?

火影忍者亦或死神?

当然,所有这些讲的都是漫画!!!

当我们还是孩子的时候,总是迷恋漫画书,当翻到我们的英雄们开始行动时会激动不已。

大家总是争论谁是最厉害的超级英雄,认真地讨论他们的家族历史,或者梦想自己拯救高谭市。我们很多人用自己的童年创造了这样的难忘时刻。

时光流逝,但是仍然有人在寻找更多的漫画。

在这个数字时代,易用且超高速的互联网连接让人们可以不停地阅读/下载最喜欢的漫画书。然而每当我们尝试在手机上阅读漫画的时候,为了阅读上面的内容而锁定每一个分镜是个麻烦事。

每当你这样做的时候,是不是很渴望有把文本自动截取下来的超能力,以便漫画更清晰同时可以舒缓眼睛?

如果你的答案是“是”,并且渴望学习Python中的新内容,那么本文将帮助你轻松地在手机或平板电脑上阅读漫画。

5639b0bac5f45707eae0529f82b8c27b.png

海绵宝宝漫画(白色部分被标记为“天沟(gutter)”)

让我们看看上面的“海绵宝宝”。 这张图片有7个分镜,为了方便在手机外阅读,我们可以把它分割成7张图片,它们将保存在指定目录下,

2171d080013c2122be5ca265403debd0.png

输出:每个分镜被保存到指定目录。

这里我将从上到下扫描图像的每一行,然后绘制一张黑白图。白色代表天沟,黑色代表其他颜色。接着我们将从左到右扫描图像,同时绘制黑白图。

此方法有助于我们获取每个分镜的分辨率,然后保存在硬盘中。

我们在SpyderV3.2上使用PythonV3.6,同时需要PIL/Pillow库(Python图像库)。

软件需求

· Anaconda v5.1

Anaconda的Windows、Mac或Linux版本可以在这里下载。

(https://www.anaconda.com/download/)

025c870a01b0a382445a6cac74a1f01a.png

· Python 3.6

Python的Windows、Mac或Linux版本可以在这里下载。

(https://www.python.org/downloads/)

e484d837cd8df4ed2c21f502b6f2d15e.png

PIL/Pillow的Windows、Mac或Linux版本可以在这里下载。

(https://wp.stolaf.edu/it/installing-pil-pillow-cimage-on-windows-and-mac/)

9a07dc95dc6a8563e879d475491f7016.png

Python代码:

下面的链接可以下载到全部的Python代码。

Python 2

Python2和PI(Python图像库)

https://github.com/mozillamonks/comicstrip/blob/master/comicstrip

Python3

这个版本使用Pillow而不是PIL(不支持Python3)

Pillow是PIL的分支,它在Python3上添加了一些用户友好的特性。

https://github.com/sohamsil/comicstrip/blob/master/comicstrip_Python3.6

第一步,导入依赖库!

003c90144a3a129fc3630f743f22ae91.png

天沟在大部分的漫画上都是空白的,让我们创建一个名为gcolor的变量,并将它设为255(RGB)。

同时定义天沟的长宽gwidth=10和gheight=10。

ef4bd789990a9798a43fb8ae131c70b5.png

我们需要在天沟中去除噪音,并且数字化我们的图像。让我们定一个可以调整对比度的变量contrast并且将值设置为0.8。(你可以根据实际需要调整它)

480f60371a4d67803b59e2047d7f4144.png

在深入各个方法前,我们再创建一个名为barrier的变量用来帮助我们区分天沟和漫画的其余部分。

barrier取值范围在1到255之间,如果图像上的颜色比barrier小,则记为黑色,否则记为白色。这里我们将它设为210。

efbe29edfe855f4cf2f35d4a3a397be2.png

现在让我们开始理解我们的方法。_isGutterRow()方法判断指定行是不是天沟,返回TRUE或FALSE。

8e3bbba4f7e7d3814c7973e24026364f.png

类似的我们为列定义另一个方法。_isGutterCol()会检查指定列是不是天沟,并返回TRUE或FALSE。

94ccbc7f07b2593d1db689f6caac1d29.png

每次遇到一行时,我们将它传到_getRow()方法中,进一步优化分镜的上下边界。在确认了分镜的上下边界所在行后,此方法返回上下边界对应行号。

274f3184044b1c06a6e12a2e7a05b185.png

24f9c9cd6027c230817e089d2a72de3c.png

_getRows()帮助我们追踪图像的所有行,并帮助我们确认分镜的行边界。它有两个参数:self代表图像文件和startRow代表开始行号。

_isGutterRow()方法检查指定行是不是天沟,_getRow()方法返回分镜的上下行号。

84110ca4d445452dca0a57bf1593ea74.png

同“行”的方式一样,每次遇到一列,我们将它传到_getCol()方法中来确定分镜的边界。在确定分镜的左右边界后,此方法返回左右边界的行号。

a1609cf6d058daba41150ea144537e9f.png

2d7963741d61172b9949740d1bb3d5b2.png

_getCols()帮助我们跟踪图像中的每一列,并确认分镜的左右边界。此方法有三个参数:self代表图像文件,rt代表分镜的上边界和rb代表分镜的下边界。

_isGutterCol()方法检查指定列是不是天沟,_getCol()方法返回分镜的左右行号。

54ca551a602ab00f0e2f18975633c778.png

_getFrames()输入整张像图并返回其中所有的分镜。

56cdac799e31ddc0129439be127ffdc8.png

86648fe3d7a32f10bb49bb2e0af05767.png

_digitize()用于图像数字化,_prepare()用于图像的预处理。

bd7633ae66789e4aebe3c05a2aef7a61.png

我们将定义page类的构造函数为__init__(),并根据我们将要使用的漫画页面的类型传递一个类的实例以及其他参数。

构造函数的参数说明如下:startRow(默认值0):从哪一行开始分析。有一些漫画第一页的顶部有标题,我们需要忽略它。

lignore, ringore(两个的默认值均为0):被扫描的漫画在左右两边可能有不是纯白的部分,这会干扰天沟的检测。这两个参数告诉天沟检测算法如何调整左右边界,其中lignore表示左侧需忽略部分,rignore表示右侧需忽略部分。

contents(默认:True):

True=> infile:是漫画内容的字符串。

False=>infile:是漫画所在路径的字符串。

infile:表示漫画内容或漫画路径的字符串(由contents参数决定)

quiet:不打印任何状态信息。

debug:允许调试输出fwidth, fheight(分镜长宽的最小值)

88d5d2b7c483ea700f9c47cb3473c278.png

将分镜导出到指定文件夹,文件名添加前缀和序号:

fa0e3289e38e636faf4a5f164019404e.png

b8cc686af79d067fcfc53cbeb9bb03a2.png

67ef1fe0eaeb8bb997513b42f44d5c68.png

在终端上调用:

d44b0e5f3fe6e798e90056eefe622025.png

有效选项

版本,显示程序版本号,以及退出

显示简短的帮助信息,以及退出

不输出进度信息到stdout(默认 False)。

启用调试输出(默认 False)。仅用于调式。普通用户不必开启此选项。在使用-d选项的同时,开启-q选项有助于正常的进度显示不会干扰到调试输出。反之亦然。

输入文件的名称,为必需参数,可以是图像文件名。

输出文件前缀

分镜的文件名格式如下:文件名前面的0会根据分镜的数量自动添加。如果你想要将文件保存在其他目录下,只需要在prefix上指定目录(例如: --prefix /tmp/foo-)

--left-ignore=PIXELS:在检测列时需要忽略的左边距。

(默认值:0)有时候(特别上扫描的漫画图像)页面的中间部分会有阴影,导致天沟不是纯白的。这会干涉天沟检测算法无法正确识别天沟。这个参数告诉程序在检测天沟时,左边距有多少像素需要忽略。

注意:在输出最终分镜图像时并不会裁剪这部分图像-它只是代表在天沟检测时并不需要考虑的部分。

--right-ignore=PIXELS:在检测列时需要忽略的右边距。(默认值:0)同“--left-ignore",除了代表右边。

--startrow=PIXELS:每页从哪一行开始(除第一页之外)。对于扫描的漫画,天沟在顶部可能会有阴影,因此为干涉检测算法。这个参数告诉程序在检测行里需要跳过的行,从而让算法忽略阴影部分。

-- gutter-width=WIDTH:天沟宽度的最小值(默认15)。

-- min-width=WIDTH:分镜宽度的最小值(默认100)。这个值越精确,分镜提取算法速度越快。

-- min-height=HEIGHT:分镜高度的最小值(默认100)。这个值越精确,分镜提取算法速度越快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python turtle画海绵宝宝,python还能这么玩?帅呆了 的相关文章

  • React 进阶: useSyncExternalStore API 外部状态管理

    React 进阶 useSyncExternalStore API 外部状态管理 文章目录 React 进阶 useSyncExternalStore API 外部状态管理 完整代码示例 动机 关于状态的思考 方案一 自行接入外部状态 外部
  • 分类器概念篇

    分类器是数据挖掘中对样本进行分类的方法的统称 包含决策树 逻辑回归 朴素贝叶斯 神经网络等 分类器的构造和实施大体会经过以下几个步骤 选定样本 包含正样本和负样本 将所有样本分成训练样本和测试样本两部分 在训练样本上执行分类器算法 生成分类
  • 以违停检测为示例的利用微软云AIOT技术加速项目落地

    AIoT即融合了AI 人工智能 和IoT 物联网 的技术 图形图像处理是人工智能领域中重要的一个分支 在日常生活中也存在大量基于图形图像的处理的场景 比如交通违章抓拍 基于视觉的司机防疲劳监测 家用摄像机的老人摔倒报警等功能 对于物联网则在
  • Kafka消息分区&producer拦截器&无消息丢失(八)

    上篇文章说了 acks 1代表什么都不管 即使配置了回调也不会起作用 0代表不会等待replic副本里的不会持久化 只要broker leader持久化成功则返回给producer 1代表all 则表示全部持久化成功才返回成功给produc
  • dubbo分布式日志跟踪

    dubbo分布式日志追踪 需要修改两个地方 一个是consumer端的 InvokerInvocationHandler java 红色是修改的地方 public class InvokerInvocationHandler impleme
  • 微服务项目打包时指定jar包复制到同一文件夹下

    转载于原文 在项目最外层pom文件中指定文件存放位置
  • 密码学技术如何选型?再探工程能力边界的安全模型|第5论

    作者 李昊轩 来源 微众银行区块链 牢不可破的密码学算法也怕物理攻击 物理信号泄露为何会威胁到隐私保护的效果 隐私保护方案对部署环境有何讲究 不可信执行环境下如何设计隐私保护方案 这里 我们将继续安全模型的分析 由隐私保护技术方案中理论层面
  • JMeter 测试脚本编写技巧

    是一款开源软件 用于进行负载测试 性能测试及功能测试 测试人员可以使用 JMeter 编写测试脚本 模拟多种不同的负载情况 从而评估系统的性能和稳定性 以下是编写 JMeter 测试脚本的步骤 第 1 步 创建测试计划 在JMeter中 测
  • java 下mp3 转 pcm、wav

    mp3 转 pcm wav 由于MP3直接转为wav 容易出现文件大小为0k 时间缩短等问题 这里是通过先将mp3转成pcm 然后在通过pcm转成wav 下面直接上代码 先引入所需要的jar包
  • CentOS系统安装libssl-dev时No package libssl-dev availab

    libssl dev是ubuntu系统的库 而centos系统对应的是openssl devel centos中运行yum install openssl devel ubuntu系统运行apt get install libssl dev
  • 7.2 IDEA 没有Java EE

    方法二 第一步 正常创建一个新的New Project 创建完成后 选择项目包 gt 点击右键 gt 点击Add Framework Support 然后勾选Web Application 4 之后点击OK确认即可 完美的创建了JavaEE
  • C#断点续传的实现示例

    断点续传是一种可以在文件传输过程中出现断电 网络故障等情况时 能够保证传输内容不会全部丢失 而是可以从已传输的位置继续传输的机制 在文件传输较大 较复杂的情况下 使用断点续传可以提高传输质量 稳定性和效率 在C 中 可以使用HTTP协议的R
  • 蓝桥杯2021年第十二届真题第二场-国际象棋

    题目 题目描述 众所周知 八皇后 问题是求解在国际象棋棋盘上摆放 8 8 8 个皇后 使得两两之间互不攻击的方案数 已经学习了很多算法的小蓝觉得 八皇后 问题太简单了 意犹未尽 作为一个国际象棋迷 他想研究在 N M
  • DCGAN生成动漫头像(附代码)

    DCGAN 顾名思义 就是深度卷积生成对抗神经网络 也就是引入了卷积的 但是它用的是反卷积 就是卷积的反操作 我们看看DCGAN的图 生成器开始输入的是噪声数据 然后经过一个全连接层 再把全连接层的输出reshape 然后经过反卷积 判别器
  • 链表-单向链表、双向链表、链表反转、删除链表指定指定值

    目录 单向链表 双向链表 链表反转 删除链表中指定的所有值 单向链表 package basic linkedList public class SingleNode public SingleNode next public int va
  • 关于idea导入gradle工程,出现sync failed的问题

    在 精通Spring MVC4 这本书中 作者通篇采用gradle来作为项目构建工具 当我们下载下来随书源码后 想导入到idea中 发现idea控制台正在syncing 在第三步configure时一直出错 有时候依赖下载不下来 你到mav
  • c编译时的错误:程序中有游离的‘\240’‘\302’‘\XXX 时解决方案

    偶尔从网上看到不错的源码 想研究下 不幸编译时遇到 错误 程序中有游离的 240 302 之类的错误 大量的源码不可能再全部重敲一遍 经过一番研究 终于让我找到简单的解决方案 还是本着让后人少走弯路的想法 分享下 首先 编译器提示的 xxx
  • 西门子S7协议格式解析

    文章目录 简介
  • 基于FPGA的超声波测距

    文章目录 一 项目框架 二 超声波测距模块 三 串口模块 1 串口发送模块 2 串口发送控制模块 四 蜂鸣器模块 五 vga显示模块 1 vga协议驱动代码 2 vga数据控制模块 六 数码管 1 数码管段选控制 2 数码管位选 七 顶层文

随机推荐

  • Vue与ElementUI的v-loading控件

    Vue与Element的v loading控件 在需要添加loading动画的组件中加入v loading xxx xxx为true时表示加载 false时关闭加载 默认样式如下 如果要修改样式或者添加文字 则使用element loadi
  • qt调用图片并自适应界面大小显示

    一 前言 记录qt使用图片打开 查看和关闭等操作 实现点击按键 打开选择的指定位置图片 有缩放显示 并可以点击放大按键放大图片 放大后图片自适应电脑窗口大小 大于窗口尺寸会根据最大宽和高缩放 小于窗口尺寸就按原比例居中显示出来 二 环境 w
  • chromedriver不在路径的解决办法

    from selenium import webdriver driver webdriver Chrome 错误信息 WebDriverException Message chromedriver executable needs to
  • BUUCTF-Secret File

    Secret 意为秘密 可知我们需要在网页中寻找到隐藏的flag文件 启动环境打开靶机 直接查看源码 发现一个文件 打开后点击 secret 但是会直接跳转到 end php 并且提示查阅结束 说明页面跳转过快 需要手动抓放包来查看 经过拦
  • 微信 Android 模块化架构重构实践(上)

    转自 https cloud tencent com developer article 1005631 作者 carlguo 微信Android架构历史 微信Android诞生之初 用的是常见的分层结构设计 这种架构简单 清晰并一直沿袭至
  • 解决mysql链接时报错Authentication plugin ‘caching_sha2_password‘ cannot be loaded的问题

    1 打开命令提示符 2 输入 cd C Program Files MySQL MySQL Server 8 0 bin 3 进入到C Program Files MySQL MySQL Server 8 0 bin gt 目录之后 键入
  • NLP学习(二)中文分词技术

    运行平台 Windows Python版本 Python3 x IDE PyCharm 一 前言 这篇内容主要是讲解的中文分词 词是一个完整语义的最小单位 分词技术是词性标注 命名实体识别 关键词提取等技术的基础 本篇博文会主要介绍基于规则
  • Windows中账户没有登录的情况下程序开机自启动

    windows打开任务计划程序 开始菜单 所有程序 管理工具 任务计划程序 打开后点击右边创建任务 在常规界面填写启动名称描述等信息 安全选项勾选不管用户是否登录都要运行 我这里为了保险起见还勾选了使用最高权限 在触发器界面选择新建 开始任
  • c++运算符

    运算符 作用 用于执行代码的运算 1 算术运算符 下表显示了 C 支持的算术运算符 假设变量 A 的值为 10 变量 B 的值为 20 则 运算符 描述 实例 把两个操作数相加 A B 将得到 30 从第一个操作数中减去第二个操作数 A B
  • 程序员学数据库那些事儿

    最近有人问 是问 不是请教 我数据库怎么学 要学哪些 以下我谈一些个人想法 其实我的数据库知识不是很扎实 真心的 当年我学这个东西时某个大神告诉我 学会sql server 走遍天下都不怕 事实上 这几年如果只会sqlserver根本到哪都
  • C++ 构造函数和析构函数是否可以继承?

    先看一个例子 cpp view plain copy include
  • 架构师需要了解的Paxos原理、历程及实战

    架构师需要了解的Paxos原理 历程及实战 数据库高可用性难题 数据库的数据一致和持续可用对电子商务和互联网金融的意义不言而喻 而这些业务在使用数据库时 无论 MySQL 还是 Oracle 都会面临一个艰难的取舍 就是如何处理主备库之间的
  • linux下部署redis

    基础知识 1 Redis的数据类型 字符串 列表 lists 集合 sets 有序集合 sorts sets 哈希表 hashs 2 Redis和memcache相比的独特之处 1 redis可以用来做存储 storge 而memcache
  • Java必懂之命名规范

    定义规范的目的是为了使项目的代码样式统一 使程序有良好的可读性 在此我从网上查找了一篇写得比较好的文章 来让大家学习 顺便自己复习一下 有时候自己写的类名不符合规范 Eclipse会出现黄色叹号 就是表示你的命名不规范 然而 规范不是规定
  • 微信小程序image图片自适应宽度比例显示的方法

    我们都知道微信小程序的组件image是用来显示图片的 它有一下几个属性 1 src 图片资源地址2 mode 图片裁剪 缩放的模式3 binderror 当错误发生时 发布到 AppService 的事件名 事件对象event detail
  • SpringMVC的架构有什么优势?——控制器(一)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方社区库接口RC522模块库调用及示例进行复现及分析 了解RDIF及非接触式IC卡的原理及操作方法 实现功能 利用已知的A
  • 单片机拟真电路图软件_电路仿真软件有哪些?6款常用的电路仿真软件推荐

    一些网友需要下载电路仿真软件这一类软件 但是 网络上寻找电路仿真软件却比较麻烦 那么 电路仿真软件有哪些 小编今天就给大家整理了6款常用的电路仿真软件推荐给大家 需要下载电路仿真软件的网友可以挑选一下 Machining 6款常用的电路仿真
  • Vue 监听localStorage

    1 在utils目录下建tool js文件 文件代码如下 重写setItem事件 当使用setItem的时候 触发 window dispatchEvent派发事件 function dispatchEventStroage const s
  • python turtle画海绵宝宝,python还能这么玩?帅呆了

    漫威还是DC 超人或者蝙蝠侠 火影忍者亦或死神 当然 所有这些讲的都是漫画 当我们还是孩子的时候 总是迷恋漫画书 当翻到我们的英雄们开始行动时会激动不已 大家总是争论谁是最厉害的超级英雄 认真地讨论他们的家族历史 或者梦想自己拯救高谭市 我