如何将最相似的Unicode字符返回到图像的某个部分?

Sky*_*ler 8 python unicode ascii image image-processing

我用Python制作了一个简单的转换器,将图像转换为ASCII.现在它使用各种深色字符,所以它可以工作,但很难在低分辨率下制作出来:例如,Google徽标如下:

  ..  .;.                  .@      
 a;       .. .;     . .. a. @ ...;.
 aa    .a.?.  ?.;.  ;.;; a. ? @a   
  .;.. .; .....  .    ..;;; ;  ;.. 
                     .a. .;        
Run Code Online (Sandbox Code Playgroud)

这几乎是不可能的.有没有办法可以将每个部分与Unicode字符的子集进行比较并返回最相似的部分,因此它可以返回例如:

  ./--.\.                  /?      
 a;       ./-.;  /  \ ./ \\ ? ./?\.
 aa    -a.?.  ?.|.  |.;?  ? ? ?-~? 
  \;.. /| \\_//  \ /  .\;;; ? \\.- 
                     .pp--?  
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 4

  1. 以您将使用的字体为您要使用的每个字符生成图像。您可能会使用固定宽度的字体,这样就可以创建一个大图像并稍后将其分解。这可能就像在编辑器中输入字符并进行屏幕捕获一样简单。
  2. 对于输入图像的每个补丁,将该补丁与所有字符图像进行比较。我将从补丁和字符中获取相应的像素,并对差值进行平方,然后将它们相加 - 总和最小的字符是与补丁最匹配的字符。

您可以通过对字符图像、输入图像或两者进行模糊处理来改善结果。您还可以通过增加输入图像的对比度来获得更好的结果。

提高结果质量和速度的另一个想法是计算每个字符的平均暗度,并且仅尝试匹配与补丁几乎相同暗度的字符。

  • 有没有办法直接使用字体而不需要屏幕截图?如果我理解正确的话,UTF-8 中有 65,536 个字符。 (2认同)
  • @user677624 并非所有 UTF-8 字符都是可打印的或可以单独使用,并且很少有字体不仅仅包含欧洲字符。当您在问题中提到“子集”时,我认为您会将其削减到合理的数字。我知道 PIL 可以生成文本图像,但我一直无法弄清楚如何使用它来使用系统字体。 (2认同)