精华内容
下载资源
问答
  • Python图像绘制字符画

    2020-09-14 16:14:44
    通过Python图像进行文字画绘制,原理:提取图像轮廓,将轮廓上对应像素点替换成文字,输出在txt文本中,复制在excel中呈现。 #!/usr/bin/env python #-*- coding:utf-8 -*- # @Time : 2020/9/11 10:26 # @...

            通过Python对图像进行文字画绘制,原理:提取图像轮廓,将轮廓上对应的像素点替换成文字,输出在txt文本中,复制在excel中呈现。

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # @Time   :  2020/9/11 10:26
    # @Author :  singweek
    # @File   :  图像转字符字符转图片.py
    
    import cv2  # 导入OpenCV-Python模块
    import random
    
    '''
     * 功能:为图片应用写生素描滤镜,并且保存图片到指定路径
     * filein:要应用滤镜的图片的路径
     * picture_name:要应用滤镜的图片的文件名
    '''
    
    
    def filter(filename):
        """
        读取图像并灰度化,输出素描二值化图像
        :param filename:
        :return:
        """
        img_rgb = cv2.imread(filename)  # 读取源图片
    
        num_down = 2  # 缩减像素采样的数目
        num_bilateral = 9  # 定义双边滤波的数目
        # 用高斯金字塔降低取样
        img_color = img_rgb
        for _ in range(num_down):
            img_color = cv2.pyrDown(img_color)
        # 重复使用小的双边滤波代替一个大的滤波
        for _ in range(num_bilateral):
            img_color = cv2.bilateralFilter(img_color, d=4, sigmaColor=8, sigmaSpace=4)
        # 升采样图片到原始大小
        for _ in range(num_down):
            img_color = cv2.pyrUp(img_color)
        img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)  # 转换为灰度
        img_blur = cv2.medianBlur(img_gray, 19)  # 增加模糊效果。值越大越模糊(取奇数)
        # 检测到边缘并且增强其效果
        img_edge = cv2.adaptiveThreshold(img_blur, 256,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,blockSize=9,C=2)
        # img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)  # 彩色图像转为灰度图像
        return img_edge
    
    def Word_Img(img,strlist,outfile="output.txt",type=2):
        """
    
        :param img: 二维灰度图像
        :param strlist: 字符画绘制的字符
        :param outfile: 输入文件名
        :param type: 占位符,默认汉字2字节
        :return:
        """
        w, h = img.shape[:]
        result = ''
        for i in range(w):
            for j in range(h):
                tmp = random.randint(0, len(strlist)-1)
                if img[i][j] < 150:#区分阈值,以便于显示轮廓,可以根据自己的需要设定
                    result += strlist[tmp]
                else:
                    result += ' '*type
            result += '\n'
        with open(outfile, 'w',encoding='utf-8') as f:
            f.write(result)
        # return result
    
    
    if __name__ == '__main__':
        img=filter("test.jpg")
        #按照需要进行图像缩放
        x, y = img.shape[0:2]
        img = cv2.resize(img, (int(y / 2), int(x / 2)))
        result=Word_Img(img,['我','爱','你'])
    
    
    
    

     

    展开全文
  • 图像的字符画绘制 要点:这是一个采用PIL库将图片转化为字符画的实例 from PIL import Image ascii_char = "$@asdsadqwdacadasdasdasdxzc" def get_char(r, b, g, alpha=256): if alpha == 0: return ' ' gray...

    图像的字符画绘制

    要点:这是一个采用PIL库将图片转化为字符画的实例

    from PIL import Image
    
    ascii_char = "$@asdsadqwdacadasdasdasdxzc"
    
    
    def get_char(r, b, g, alpha=256):
        if alpha == 0:
            return ' '
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
        unit = 256 / len(ascii_char)
        i =int(gray // unit)
        return ascii_char[i]
    
    
    def main():
        im = Image.open("D:\\LOL.jpg")
        WIDTH, HEIGHT = 100, 60
        im = im.resize((WIDTH, HEIGHT))
        txt = ""
        for i in range(HEIGHT):
            for j in range(WIDTH):
                txt += get_char(*im.getpixel((j, i)))
            txt += '\n'
        fo = open("D:\\pic_char.txt", "w")
        fo.write(txt)
        fo.close()
    
    
    main()
    
    
    展开全文
  • Python之旅——图像的字符画绘制

    千次阅读 2019-10-17 18:39:20
    图像的字符画绘制 第二次写博客,记录每天的学习点滴。 知识点总结 Python的第三方图像处理库 PIL 灰度值公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b 灰度值小的地方用列表开头的符号映射,灰度值大的地方用...

    图像的字符画绘制

    第二次写博客,记录每天的学习点滴。

    知识点总结

    1. Python的第三方图像处理库 PIL
    2. 灰度值公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b
      灰度值小的地方用列表开头的符号映射,灰度值大的地方用列表末尾的符号映射。
    3. getpixel((j,i))得到某个像素点的颜色,一般返回(r, g, b)
    from PIL import Image
    
    ascii_char = list ('"$%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-/+@<>i!;:,\^`.')
    def get_char(r, b, g, alpha = 256):
        if alpha == 0:
            return ' '
        #计算每个像素点应该放入列表中哪个字符
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
        unit = 256 / len(ascii_char)
        return ascii_char[int(gray / unit)]
    
    def main():
        im = Image.open('boy.jpg')
        WIDTH , HEIGHT = 90,34
        im = im.resize((WIDTH,HEIGHT))
        #初试化文本
        txt = ""
        for i in range (HEIGHT):
            for j in range(WIDTH):
                txt +=  get_char(*im.getpixel((j,i)))
            txt += '\n' #遍历每行结束后切换到下一行
    	#创建文本文件,将转换的字符串图画保存进去
        fo = open("pic_char.txt","w")
        fo.write(txt)
        fo.close()
    
    if __name__ == '__main__':
        main()
    
    展开全文
  • 图像的字符画绘制

    千次阅读 2018-12-02 23:55:44
    这个图像的字符画绘制,是在嵩天老师的《Python 语言程序设计基础》里的一小节,当初我把代码全码上去的时候,发现能运行成功,但是和书上的效果图完全不一样。恩,图片如下: ...
    
    

    这个图像的字符画绘制,是在嵩天老师的《Python 语言程序设计基础》里的一小节,当初我把代码全码上去的时候,发现能运行成功,但是和书上的效果图完全不一样。恩,图片如下:
    远远的看
    远远的看,还是有点像原图的模样,原图如下:
    在这里插入图片描述
    生产图片的代码如下:

    #DrawCharImage.py
    from PIL import Image
    ascil_char = list('"$_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxr\
                        jft/\|()1{}[]?-/+@<>i!:;,\^`.')
    def get_char(r, b, g, alpha=256):
        if alpha == 0:
            return ' '
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
        unit = 256 / len (ascil_char)
        return ascil_char[int(gray//unit)]
    def main():
        im = Image.open('astro.jpg')
        WIDTH, HEIGHT = 100, 60
        im = im.resize((WIDTH, HEIGHT))
        txt =' '
        for i in range(HEIGHT):
            for j in range(WIDTH):
                txt += get_char(*im.getpixel((j, i)))
            txt += '\n'
        fo = open('pic_char.txt', 'w')
        fo.write(txt)
        fo.close()
    main()
    

    后来我百度了一个大佬的代码,链接:https://blog.csdn.net/wait_nothing_alone/article/details/52901531
    我把我的图片放到他的代码上运行一下,发现OK,运行后的图片如下:
    在这里插入图片描述
    我用的是 宋体,八号,最小的字体都还那么大。
    他的代码如下。我稍微改了一处:

    # -*- coding: utf-8 -*-
    from PIL import Image
    
    codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. '''#生成字符画所需的字符集
    count = len(codeLib)
    
    def transform1(image_file):
        image_file = image_file.convert("L")#转换为黑白图片,参数"L"表示黑白模式
        codePic = ''
        for h in range(0,image_file.size[1]):  #size属性表示图片的分辨率,'0'为横向大小,'1'为纵向
            for w in range(0,image_file.size[0]):
                gray = image_file.getpixel((w,h)) #返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组
                codePic = codePic + codeLib[int(((count-1)*gray)/256)]#建立灰度与字符集的映射
            codePic = codePic+'\r\n'
        return codePic
    
    def transform2(image_file):
        codePic = ''
        for h in range(0,image_file.size[1]):
            for w in range(0,image_file.size[0]):
                g,r,b = image_file.getpixel((w,h))
                gray = int(r* 0.299+g* 0.587+b* 0.114)
                codePic = codePic + codeLib[int(((count-1)*gray)/256)]
            codePic = codePic+'\r\n'
        return codePic
    
    
    fp = open(u'暴走.jpg','rb')
    image_file = Image.open(fp)
    image_file=image_file.resize((int(image_file.size[0]*0.75), int(image_file.size[1]*0.5)))#调整图片大小
    #print u'Info:',image_file.size[0],' ',image_file.size[1],' ',count
    
    tmp = open('tmp.txt','w')
    tmp.write(transform1(image_file))
    tmp.close()
    
    

    今晚已经太晚了,已经十二点了,明天再仔细研究一下代码吧。12/03 0:06

    首先自定义一个字符集,将这个字符集替代图像中的像素点,是的每个字符对应图像中的不同颜色。字符的种类越多越能还原图像中的图像中的色彩变化,图片也更加富有层次感。

    ascil_char = list('"$_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxr\
                        jft/\|()1{}[]?-/+@<>i!:;,\^`.')
    

    像素的RGB颜色值与字符集的对应函数如下:

    def get_char(r, b, g, alpha=256):
        if alpha == 0:
            return ' '
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
        unit = 256 / len (ascil_char)
        return ascil_char[int(gray//unit)]
    

    PIL库中Image类的resize(size)函数对图片重新设定大小。size是一个二元元组,分别表示新图像的长度和宽度。resize()函数不是简单第改变图像大小,而是对像素在新尺寸下重新排列。
    创建一个控制符串txt,然后利用一个嵌套循环向里面添加字符。im.getpixel()方法可以返回给定推向位置的像素值,如果图像为多通道,则返回一个RGB颜色元组。

    经过研究,发现上一个代码会出现那种情况:

    1. 一个是图像的大小设置
    2. 一个是.txt文件字体的设置
    3. 字符集的不同
      当我将图像大小设置为宽300、高80后,运行后图像如下:
      在这里插入图片描述
      宋体、常规、小六
      当将字符集改变为ascil_char = list( '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^’. ‘’’)#生成字符画所需的字符集`,运行后的图像如下:
      在这里插入图片描述

    当将彩色向灰度的转换为:gray = int(0.299 * r + 0.587 * g + 0.114 * b),运行后图像如下:
    在这里插入图片描述

    代码如下:

    #DrawCharImage.py
    from PIL import Image
    ascil_char = list( '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. ''')#生成字符画所需的字符集
    def get_char(r, b, g, alpha=256):
        if alpha == 0:
            return ' '
        #gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
        gray = int(0.299 * r + 0.587 * g + 0.114 * b)
        unit = 256 / len (ascil_char)
        return ascil_char[int(gray//unit)]
    def main():
        im = Image.open('astro.jpg')
        WIDTH, HEIGHT = 300, 80
        im = im.resize((WIDTH, HEIGHT))
        txt =' '
        for i in range(HEIGHT):
            for j in range(WIDTH):
                txt += get_char(*im.getpixel((j, i)))
            txt += '\n'
        fo = open('pic_char.txt', 'w')
        fo.write(txt)
        fo.close()
    main()
    

    总结:不同的字符给人带来的视觉效果不同,@#¥这类字符有浓密的色彩感,而_!{}/|这类字符空白较多,一般适合表示浅色。在生成字符画后,可以根据字符集和图像的对照适当修改字符排列顺序,例如:将背景色对应的字符修改为_或/,将会突出图像效果,将图像中浓墨重彩色地方使用@*或B&表示层次感更强。

    im.getpixel((j,i))返回的是一个元组,这个元组有三个元素,分别对应三个颜色通道(RGB)的值,是一个运算符,对元组使用运算符即为元组拆封操作,元组会返回元组的所有元素。
    12/3 10:21

    展开全文
  • python图片转字符画

    2021-06-03 12:35:16
    python图片转字符画 文章目录python图片转字符画解析完整代码 解析 from PIL import Image#从模块导入Image,导入需要的图像库 from PIL import ImageDraw#从模块导入ImageDraw,提供了图像对象简单2D绘制 from ...
  • python图像

    2020-03-17 22:12:08
    9:描绘图片轮廓 from PIL import Image from PIL import ImageFilter im=Image.open(‘mingren.jpg’) om=im.filter(ImageFilter.CONTOUR...10:绘制图像的字符画 from PIL import Image ascii_char = list("KaTeX ...
  • 希望能够绘制出如图片所示效果![图片说明](https://img-ask.csdn.net/upload/202003/12/1584003926_58107.png) 以下是MATLAB代码: %温度不同普朗克黑体单色辐射能力与波长曲线 clear %清除变量 k=1...
  • 这意味着,只要您的字体支持,每个字符都可以用于绘制图像的2x4区域。 名称和想法来自但是在添加了一些新功能的同时,并没有实现其中的所有功能。 对于画布,仅存在简单的设置/取消/切换功能,以及便利功能...
  • 1.介绍 这里是一个链接目录,记录了python学习过程中编写的编程题,只要没写完结,这个... 图像的字符画绘制 CSV格式的HTML展示 CSV和JSON格式相互转换 体育竞技分析 pip安装脚本 图像的手绘效果 科学坐标图..
  • 绘制到应用内画布(也可以保存为图像) OSX 剪贴板读/写访问 py80 模块 py80 模块充当 python 和 py80 应用程序之间桥梁,公开了与操场交互各种方法。 log(message) :将消息记录到应用内控制台 clearLog() ...
  • uniout:打印可读的字符,而不是转义的字符串。 xpinyin:一个用于把汉字转换为拼音的库。 pyfiglet:figlet 的 Python 实现。 flashtext:一个高效的文本查找替换库。 textdistance:支持 30 多种算法来计算...
  • 目标 学习用OpenCV出不同几何图形 将学习这些功能:cv.line(), cv.circle() , cv....img:你想要绘制图形的图像 颜色:形状颜色。对于BGR,将它作为一个元组传递,例如:(255,0,0)为蓝色。对于灰度级...
  • Python 科学计算

    2018-09-20 16:59:31
    1.1 Python 简介......................................1 1.2 安装软件包......................................2 1.2.1 Python(x,y)..................................... 2 1.2.2 Enthought Python ...
  • 应用案例 - 使用正则表达式验证输入的字符串 Day13 - 进程和线程 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信 使用线程 ...
  • 学习使用tableau进行一些常规图的绘制。数据是商品通过python转换得到深圳市二手房官方指导价,下载链接:下载链接和提取码1234 学习内容: 进行常规统计信息揭示,操作tableau,感觉tableau和excel差不多。...
  • WxGL是一个基于PyOpenGL三维数据可视化库,以wx为显示后端,提供Matplotlib风格交互式应用模式,同时,也可以和wxPython无缝结合,在wx窗体上绘制三维模型。 1. 安装和依赖关系 WxGL模块使用pip命令安装。 ...
  • Reason :跨平台框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势需求。 ROOT :具备所有功能一系列面向对象框架,能够非常高效地处理和分析大量数据,为欧洲原子能...
  • 绘制地图(如果某条数据'省','市'或'区'字段有缺,则会忽略该条数据不进行绘制),速度会比较慢,需要耐心等待,绘制的图像如下: 还有更多绘图工具请参考文档大标题为“示例与测试用例”部分。 到这里...
  • wxPython学习手册

    热门讨论 2014-04-19 08:01:58
    7.1.7 如果我的文本控件不匹配我的字符串该怎么办? 187 7.1.8 如何响应文本事件? 188 7.2 使用按钮工作 189 7.2.1 如何生成一个按钮? 189 7.2.2 如何生成一个位图按钮? 191 7.2.3 如何创建开关按钮(toggle ...
  • 最重要是还全面介绍了如何利用原生C/C++(NDK)和Python、Lua等脚本语言(Android Scripting Environment)来开发Android应用;本书实战性强,书中每个知识点都有配精心设计示例,尤为值得一提是,它还以...
  • Android应用开发揭秘--详细书签版

    热门讨论 2012-12-12 13:27:46
    5.2.4 字符绘制 125 5.2.5 图像绘制 126 5.2.6 图像旋转 129 5.2.7 图像缩放 131 5.2.8 图像像素操作 134 5.2.9 Shader类介绍 137 5.2.10 双缓冲技术 140 5.2.11 全屏显示 142 5.2.12 获得屏幕属性 142 ...
  • 最重要是还全面介绍了如何利用原生C,C++(NDK)和Python、Lua等脚本语言(AndroidScriptingEnvironment)来开发Android应用,《Android应用开发揭秘》实战性强,书中每个知识点都有配精心设计示例,尤为...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

python图像的字符画绘制

python 订阅