公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
1.0k 浏览

我把下面的imageApply修改后,代码可以正常运行,并且速度变快了

 

(*对每个像素块去匹配字符串图片*)
imageApply[x_] := Module[{},
   If[x == 1, Return[" "],
    If[x == 0, Return["0"],
     If[x < .5, Return["."], Return["1"]
      ]]]
   ];

 

下面是一段生成彩色字符画的代码,希望大家多多指教

(*找到画中五种最主要的颜色*)
colorQuanity[address_] := Module[{pic, pic5col, color, char, col, ass},
  pic = Import[address];
  pic5col = ColorQuantize[pic, 5];
  col = Union@Flatten[ImageData[pic5col], 1];
  color = RGBColor[col[[#]]] & /@ Range[5];
  char = {"?", "1", "0", "#", "x"};
  ass = Association[
    Table[col[[i]] -> {color[[i]], char[[i]]}, {i, 1, 5}]];
  Return[ass];
  ]
  ---------------------------------------
  (*将图片分成小的像素块*)
  picpad[address_] := 
  ImagePartition[ColorQuantize[Import[address], 5], 5];
  ---------------------------------------
  (*找到像素块中使用最多的颜色*)
  f[x_] := Commonest[Flatten[ImageData[x], 1], 1][[1]]
  ---------------------------------------
  (*将像素块与其符号对应*)
  imageApply[x_] := Module[{ans},
  ans = ass[x];
    Return[Style[ans[[2]], ans[[1]]]];
  ]
---------------------------------------
(*导出合成的彩色字符画*)
Export["1.jpg", 
  Grid[Map[imageApply, oneimage, {2}], Spacings -> {0, -.2}]]; 

------之前遇到的问题-------

自己在做一个将bad apple的图片转字符画的代码,代码如下,但是遇到了一个问题,下面这段代码在处理的图片较小时,如只处理30张,是可以的,但是一旦处理的变多,程序就会崩溃,但是内核还是在运算的,就是还会有图片的输出。

 

自己好像找不到问题在哪里,每一行代码单独运行都是不会有问题的。

 

测试数据:链接: https://pan.baidu.com/s/1dFrPldf 密码: jrkq

 

测试数据里有500张图片,我下面的代码每次运行30不会出错,但是多了就会出错。

 

 

(*生成用于替换的字符*)
char = FromCharacterCode[#] & /@ Join[Range[48, 49], {32}, {46}];
charpic = 
 ColorConvert[Rasterize[#, RasterSize -> 10], "Grayscale"] & /@ char
(*图像分割*)
importprocess[address_] := 
  ImagePartition[Binarize[Thumbnail[Import[address], 680]], {7, 17}];
(*对每个像素块求颜色均值*)
f[x_] := N[Mean[Flatten[ImageData[x]]]];
(*对每个像素块去匹配字符串图片*)
imageApply[x_] := Module[{},
   If[x == 1, Return[charpic[[3]]],
     If[x == 0, Return[charpic[[1]]],
      If[x < .5, Return[charpic[[4]]], Return[charpic[[2]]]]
      ]
     ];
   ];
(*将最后生成的图像导出*)
export[start_, end_] := Module[{i, picpad, oneimage},
   Table[
     picpad = 
      importprocess[
       "F:\\bad_apple\\" <> 
        ToString[i] <> ".jpg"];
     oneimage = Map[f, picpad, {2}];
     Export[
      "F:\\bad_apple_char\\" <>
        ToString[i] <> ".jpg", 
      Grid[Map[imageApply, oneimage, {2}], Spacings -> {0, -.1}]];
     , {i, start, end}];];

 

 

关于上面函数的使用,把上面代码运行后,只需要输入export[图片开始序号,图片结束序号]即可

分类:图像处理 | 用户: WMN7 (606 分)
修改于 用户:WMN7
Grid换成ImageAssemble试试
换成了ImageAssemble就可以了,不过我后来自己把代码重新修改了一下,不适用栅格后的图片去代替,直接用字符去代替,速度会块一些,代码补充在上面

登录 或者 注册 后回答这个问题。

...