最近找了一个将图像灰度图转化位字符串输出显示的方法,编程语言python,导出文本。
直接上源码:
import cv2
# 字符串类型
ascii_char_all = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
ascii_char = list(" -/1")
# 将灰度值转为字符
def get_char(gray_number, ascii):
length = len(ascii)
unit = (256.0 + 1) / length
return ascii[int(gray_number / unit)]
if __name__ == '__main__':
image = cv2.imread('timg.jpg', 0)
# 图像缩放
image = cv2.resize(image, (0, 0), fx=0.5, fy=0.2)
# 或者图像直接修改尺寸
# image = cv2.resize(image, (120, 60))
txt = ""
for i in range(image.shape[0]):
for j in range(image.shape[1]):
# 对打开的图片的每个坐标的灰度值做判断,
# 用get_char()获取该颜色灰度值对应的字符,然后拼接成字符串txt
txt += get_char(image[i, j], ascii_char_all) # 调用字符串方法或ascii_char
txt += '\n'
print(txt)
# 字符画输出到文件中
f = open('output.txt', 'w')
f.write(txt)需要转成字符串的原图
输出的文本用记事本打开按住Ctrl用鼠标滚轮将其缩到最小截图。
使用ascii_char_all表格转换的图像:
使用ascii_char表格转换的图像:
边缘被字符填充了,这里为了区分我将原图做个直方图均衡化处理:
image = cv2.equalizeHist(image)
显示效果如下:
至于使用ascii_char_all表格做出的图为什么后面字符串有长有短不是圆,还不清楚什么原因,希望有知道的大神指点改进一下,万分感谢。