Python图像绘制字符画

        通过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,['我','爱','你'])



 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值