我把下面的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[图片开始序号,图片结束序号]即可