zoukankan      html  css  js  c++  java
  • python小项目二:图片转字符画 标签: pythonPIL 2017-06-12 10:26 19人阅读 评论(0)

    这个项目注意练习python使用命令行参数,以及PIL库的使用。本文是练习实验楼项目的个人笔记与总结。


    项目目的:输入一幅图像,输出一个文本,其中每个图像中的像素根据其颜色的不同,用不同的字符表示。

    效果如下:

    -----------》》》》》》》》



    为了掌握这个项目,需要解决以下问题:


    1. 首先需要建立图像像素颜色(这里是灰度值)对应的字符列表。这里我们采用'''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. '''这个字符串当中的字符建议灰度-字符映射表的右侧。

    实际使用时,我们需要的是单独的一个个字符,所以我们这里使用list()函数将整个字符串变为单个字符的list,变量名为ascii_char。

    由此,我们可以根据label = np.int(gray/(256.0+1)*len(ascii_char))建立映射关系。


    2. 之后我们需要遍历图像,取出每一个像素点,然后通过映射表得到字符。问题在于:如何取出图像的像素点?如何保存每个像素点上的字符?

    实验楼的项目中选用了PIL库,不过这个库使用起来并不是很方便,这里为了了解一个新的库,作者也进行了尝试。遍历图像的所有坐标点(即像素点),运用getpixel((i,j))方法来得到像素点的颜色。再利用映射关系,得到对应的字符,将其存在一个字符串之中(每一行执行结束后,字符串中多写一个‘ ’以保持图像形状不变)。

    这里有几个坑需要注意, 

    getpixel在取像素点时,需要取成(j,i),这样输出的结果才一致。而因为这个原因,如果输出的图像行列大小不一致,则会报错(索引超出范围);

    有的图像(如该项目中的图片读入后,每一个像素点是四维的,所以需要先变换为rgb图像:image = Image.open('...'),rgb_im = image.convert('RGB'))之后才能用getpixel得到其r、g、b值。


    3. 命令行参数设置与获取

    先做命令行参数的直观说明。 运行python函数时,以Windows为例,可以在cmd命令窗口下输入python 代码名称.py来运行这个程序。同样的,我们可以在运行时输入这个代码需要的一些参数,例如python XXX.py image_path 100 100(运行XXX代码,分别给出图像路径,输出的高和宽)。

    下面我们介绍上述的内容如何实现:

    我们需要使用argparse库,然后进行三步走:

    1.创建解析器对象:parser = argparse.ArgumentParser()

    2.设置命令行参数和选项:parser.add_argument('file')

    3.获取参数:args = parser.parse_args()

    filepath = args.file

    在设置命令行参数时有着更详细的设置参数,可参看argparse库的官方文档。


    我编写的代码存放在:http://download.csdn.net/detail/u010103202/9867790,可以参考(实验楼为py2,我的为py3)。

  • 相关阅读:
    phpqrcode生成带logo的二维码图片及带文字的二维码图片
    php 文件压缩zip扩展
    js常用的正则表达操作
    WebViewJavascriptBridge详细使用(转载)
    html5的FormData对象和input的file属性以及window.URL.createObjectURL( ) 方法(转载)
    js面向对象的实现(example 二)
    PHP二维数组(或任意维数组)转换成一维数组的方法汇总
    Yii2实现自定义独立验证器的方法
    yii2.0配置以pathinfo的形式访问
    安装 AdminLTE和 yii2-admin
  • 原文地址:https://www.cnblogs.com/helay/p/7133943.html
Copyright © 2011-2022 走看看