matlab描绘小猪佩奇为字符串

matlab描绘小猪佩奇为字符串

写在前面

从目前的形势来看,小猪佩奇很火呀。啥也别说了,我已经是小猪佩奇纹上身的人了。前两天工作的时候感觉,代码注释有点不丰满,想着这个工程已经比较成熟了,就把注释多添加点,写上规范的程序注释,这样就可以把工程交出手了。如果后续有新同事进来,可以无缝进行主导工作。想归想着,就想着怎么把什么东西添加到代码注释里面,于是就出趁着大火的小猪佩奇,尝试了一下给加进去。

怎么处理

处理方式

用哪种语言呢?本人语言学的太杂了,想了想,初步决定用python或者matlab,因为这两种相对来说比较好操作。可是python的图形处理没有怎么接触过,又因为最近一直使用matlab做图像处理,估计用起来比较快,于是乎就决定用matlab 了。

处理思路

因为只是想把图形的东西转换成对应的字符串,所以也应该只是涉及到:

  • 彩色图片转换成灰度图(一开始的时候还想过转换成二值化图片)
  • 根据灰度不同进行分级,将每级输出为同一字符串
  • 输出字符串到文件

初步估计这么做就是OK的,但是实际操作中会出现一些问题,后续讨论。

开干,走起

你以为我会说:打开matlab,右上角 file–> new –> Script…….

错!

按照我的习惯是这样的:

clc;
close all;
clear all;
A = imread('PeiQi.jpg');
B = rgb2gray(A);
B = imresize(B,[107,80]);
% thresh = graythresh(A);   % 这里是进行阈值自设定,
% C = im2bw(A,thresh);      % 根据设定的阈值进行二值化操作
% imtool(B);
ft = fopen('comment.c','w+');
[m,n] = size (B);
C = uint8(ones(m,n)*255);
for i =1:1:m
    fprintf(ft,'\n');
    for j = 1:1:n
%         fprintf('%d',B(i,j));
        if B(i,j)>235
            C(i,j) = 255;
            fprintf(ft,'%s','  ');
        elseif B(i,j) <= 235 && B(i,j) > 205
            C(i,j) = 210;
            fprintf(ft,'%s','~.~');
        elseif B(i,j) <= 205 && B(i,j) > 150
            C(i,j) = 180;
            fprintf(ft,'%s','%!%');
        elseif B(i,j) <= 150 && B(i,j) >90
            C(i,j) = 120;
            fprintf(ft,'%s','@,@');
        else
            C(i,j) = 0;
            fprintf(ft,'%s','#`#');
        end
    end
end
% imtool(C);
fclose(ft);
fprintf('%s','That is all!');

先把代码放上去,反正是个小文件,所以吓不到人。

准备素材

首先我们得有一个模板,也就是小猪佩奇的图片,以此为模板来绘制想要得到的字符串,比如说我找到的就是下面这个图片:

小猪佩奇模板

按照后续我的输出调试,选图的时候需要注意:

  • 尽量选择不复杂的图片,图形看起来简单
  • 有大面积的相同灰度
  • 图片的分辨率不宜太大
  • 画面在整个图片占有率比较高

这些需要注意的地方,在后续输出的时候影响很大。

Code的思路

思路很清晰,就是读取图片,取灰度值,转换成合适的Size,开始的时候有设置为二值化图片,但是因为那样不使用与多灰度等级的,所以就不用了。

接下来的就是对灰度进行等级区分,这里,我是人工区分的,使用matlab的工具:

    imtool(B);

这个函数打开之后是可以清楚的看到每个像素的具体数值的,选取的图片的灰度等级比较集中的话,就后期操作的时候比较容易分级。

可以新建一个矩阵来存储分级之后的数值,这样显示出来之后会进行对比,如果外形相差不大,那么就可以用来转换成字符串了。

转换字符串遇到的问题

转换成字符串需要注意,效果的好坏其实是跟不同的平台影响挺大的。

首先是因为字符串的宽度不一样,比如说 -% ,明显看来后界面的百分号要比前面的短线宽,虽然都是一个字符,但是就是有差距;还有就是受到行距的影响,即使你使用的都是相同的字符,但是因为行距不一样,所以最后在生成的文件当中,会出现一定程度的形变。

这个时候有什么办法可以调整呢,都跟你叙述到这种程度上了,那就根据不同的使用版本,自己调整喽。

给你看看效果

上图:

效果图

哈哈,效果怎么样,就这么将就看吧,后续附上运行结果。

后续

这个太大了,用 ==imresize== 把图形的大小给修改了,慢慢调一调,就出来了。

但是我觉得可以不按像素点处理,可以把图像模糊话,那样的效果可能更好一点,还没来得及实现。

收工!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
MATLAB中,将字符转换为字符串可以使用string()函数。例如,如果有一个字符数组charArray,可以使用string(charArray)将其转换为字符串数组。\[1\]另外,如果只有一个字符,可以直接使用单引号将其括起来,这样也可以得到一个字符串。例如,'a'会被解释为一个字符串。 #### 引用[.reference_title] - *1* [MATLAB中字符数组和字符串数组的转换](https://blog.csdn.net/qq_54186956/article/details/126447130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [matlab字符串转换](https://blog.csdn.net/Ibelievesunshine/article/details/79919500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [matlab 字符转化](https://blog.csdn.net/weixin_43859329/article/details/103962129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShareWow丶

前人栽树,分享知识,传播快乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值