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

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

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

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

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

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

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

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

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

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

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

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

软件需求

· Anaconda v5.1

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

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

· Python 3.6

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

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

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

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

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

第一步,导入依赖库!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

构造函数的参数说明如下:

startRow(默认值0):从哪一行开始分析。有一些漫画第一页的顶部有标题,我们需要忽略它。lignore, ringore(两个的默认值均为0):被扫描的漫画在左右两边可能有不是纯白的部分,这会干扰天沟的检测。这两个参数告诉天沟检测算法如何调整左右边界,其中lignore表示左侧需忽略部分,rignore表示右侧需忽略部分。contents(默认:True):True=> infile:是漫画内容的字符串。False=>infile:是漫画所在路径的字符串。infile:表示漫画内容或漫画路径的字符串(由contents参数决定)quiet:不打印任何状态信息。debug:允许调试输出fwidth, fheight(分镜长宽的最小值)

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

在终端上调用:

有效选项

版本,显示程序版本号,以及退出显示简短的帮助信息,以及退出不输出进度信息到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)。这个值越精确,分镜提取算法速度越快。

海绵宝宝python代码_Python那些事——python还能这么玩?帅呆了相关推荐

  1. 有趣的超短python代码_Python 学习之——Python超短教程

    前言 本教程综合Stanford CS231N和UC Berkerley CS188的Python教程. 教程很短,但适合有一定编程基础,学过其他语言的童鞋. Python 启动Python 解释器 ...

  2. python画简单花的代码_Python竟能画这么漂亮的花,帅呆了(代码分享)

    讨论函数和模块这么久后,我一直想用一个有趣的和有趣的例子总结,同时作为一个实际锻炼.有趣的编程实际上是最好的学习方式.当我刚毕业十多年前,我第一次写在我的手机应用程序的工作.当时,我认为这是非常有趣的 ...

  3. python编程语言能干什么-这 13个,1 行Python代码能干哪些事?

    1 行Python代码能干哪些事,这 13个你知道吗? Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译.其中很重要的一项就是Pytho ...

  4. 一段有趣的python代码_Python 五个有趣的彩蛋,你都知道吗?

    阅读文本大概需要 6.6 分钟. 当一门编程语言是开源的时候,往往会有产生一些搞笑和有趣的东西.通常,这意味着社区的贡献者会为该语言添加一些有趣和特别的彩蛋以及隐藏的特性(当然前提是不会增加在生产环境 ...

  5. python turtle画画 30排以内_Python竟能画这么漂亮的花,帅呆了(代码分享)

    阅读本文大概需要3分钟 关于函数和模块讲了这么久,我一直想用一个好玩有趣的小例子来总结一下,同时也作为实战练习一下. 趣味编程其实是最好的学习途径,回想十几年前我刚毕业的时候,第一份工作就给手机上写a ...

  6. 一段简单的python代码_Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐. 不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文 ...

  7. 读懂python代码_Python面试|一文让你读懂if __name__==’__main__’的含义

    程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等.如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要 ...

  8. 用python海龟制图画花瓣_Python竟能画这么漂亮的花,帅呆了(代码分享)

    阅读本文大概需要3分钟 关于函数和模块讲了这么久,我一直想用一个好玩有趣的小例子来总结一下,同时也作为实战练习一下. 趣味编程其实是最好的学习途径,回想十几年前我刚毕业的时候,第一份工作就给手机上写a ...

  9. 用python花猫_Python竟能画这么漂亮的花,帅呆了(代码分享)

    阅读本文大概需要3分钟 关于函数和模块讲了这么久,我一直想用一个好玩有趣的小例子来总结一下,同时也作为实战练习一下. 趣味编程其实是最好的学习途径,回想十几年前我刚毕业的时候,第一份工作就给手机上写a ...

最新文章

  1. Keepalived实现LVS-DR双机热备_2015101601
  2. 根据名字预测性别——朴树贝叶斯分类器
  3. 实践SQLServer Tuning
  4. OCM备考 三. Managing Database Availability 之recovery catalog
  5. javascript常用技巧
  6. Java交流|面试最后一问:你有什么问题想问我吗?
  7. 国内linux内核镜像仓库,国内较快的maven仓库镜像
  8. java的关键字和保留字_Java关键字和保留字及其含义
  9. sort()基本用法
  10. Idea运行报错Error running ‘Application‘: Command line is too long的解决方法
  11. hdoj2045:LELE的RPG难题(递推)
  12. 中国大学生计算机设计大赛 历史作品博物馆
  13. 解决硬盘自动休眠问题
  14. ​燕东微科创板上市:市值276亿 亦庄国投与京东方是股东
  15. 竖流式沉淀池三角堰计算_竖流式沉淀池设计计算
  16. Linux常用命令大全(史无前例的命令大全)
  17. 关于网络传输中速度达不到很高的原因
  18. BZOJ1193: [HNOI2006]马步距离
  19. pdf 转 word 软件
  20. 【Electronics】基于锁相环CD4046的数字频率合成器

热门文章

  1. 说话之道学习笔记1-转述赞美
  2. 3. 第一个 Java 程序 - Hello World【连载 3】
  3. Ubuntu NVIDIA显卡驱动工作模式切换,无法检测到笔记本自带屏幕,屏幕无法工作/黑屏
  4. 能让女人迷死你的七句话(男生快来看)
  5. js判断html密码,JS判断密码强度 - KG-鲜血、汗水和眼泪 - OSCHINA - 中文开源技术交流社区...
  6. javascript中如何创建数组-与创建数组的几种方法
  7. 前后端分离以及vue框架的介绍
  8. 华为鸿蒙系统平板,首款预装鸿蒙OS的华为平板即将登场
  9. CGRidCtrl控件 学习心得
  10. 马云:不吃苦,你要青春干嘛?