首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MATLAB大作业选登-图片转换成字符画

[编者注:]大作业界面比较简单,用代码写即可,两个轴、三个按钮,都有重要功能。再加上一个窗口的生成,以及一个静态文本帮助信息,共用7次底层函数,界面设计没有花费太多精力。从编程的角度来说,通过一个双循环,对照片每个像素点进行处理,最能体现编程思想,也是作业特点。

一、设计目标

此大作业的设计目标是通过matlab编程将一张图片转换为字符的格式保存在txt文件中,并且制作简单美观的GUI交互界面。

二、技术路线

1.编程实现GUI交互界面,其中包括三个按钮,两个图片展示框,一个静态文本框展示操作指南等信息;

2.编写open按钮的callback函数,其功能是从一个可以自定义的路径导入图片到图片展示框,避免了使用前还需要把要转换的图片放到.m文件的路径下,为用户提供了方便;

3.编写switch按钮的callback函数,其功能是把导入的图片转换为灰度图;

4.编写save按钮的callback函数。首先定义一个字符串,字符串的内容是颜色由深到浅的几个字符,然后用图片的灰度值除以字符串的长度再取整加一,实现某一个范围的灰度值对应某一个颜色深度的字符。再将对应好的字符矩阵用writematrix函数对齐输出到txt文件中。输出的txt文件同样可以自定义保存路径,在保存对话框中只需要注意在自定义文件名后面加上后缀.txt。

三、运行情况

1、启动程序后的初始界面

2、选择打开文件按钮,出现预定义对话框。

3、打开文件后显示在第一个坐标轴中

4、点击switch按钮,灰度图片显示在第二个轴中

5、点击保存按钮,保存文件,注意选择自定义的txt文件

四、函数代码(R1.m)

global GUI

GUI.F=figure('name','字符画生成器','IntegerHandle','off','position',[100 25 920 740]); %主界面

GUI.O=uicontrol('parent',GUI.F,'position',[20 350 170 40],'style','pushbutton','string',' o p e n ! ','callback',@open_image); %打开图片按钮

GUI.S=uicontrol('parent',GUI.F,'position',[215 350 170 40],'style','pushbutton','string','s w i t c h !','callback',@switch_image); %转换按钮

GUI.s=uicontrol('parent',GUI.F,'position',[410 350 170 40],'style','pushbutton','string',' s a v e ! ','callback',@save_image); %保存按钮

GUI.B=axes('parent',GUI.F,'position',[20/920 405/740 560/920 315/740],'visible','on','box','on'); %等待转换的图片

GUI.A=axes('parent',GUI.F,'position',[20/920 20/740 560/920 315/740],'visible','on','box','on'); %转换完成的图片

guide=['操作指南',10,'1.点击open按钮从某一地址选取要转换为字符画的图片;',10,'2.点击switch按钮预览图片的灰度图;',10,'3.点击save按钮将灰度图保存为字符画(txt格式文本)。',10,10,10,10,'如果保存的字符画难以辨认,可以通过在txt文件内调整字体大小,缩放整个文本两个方法改善。'];

GUI.H=uicontrol('parent',GUI.F,'position',[600 20 300 700],'style','text','string',guide,'BackgroundColor',[0.5 1 0.667],'horizontalalignment','left','Fontsize',19);

set(GUI.B,'xtick',[])  %删除当前图x轴刻度;

set(GUI.B,'ytick',[])  %删除当前图y轴刻度;

set(GUI.A,'xtick',[])  %删除当前图x轴刻度;

set(GUI.A,'ytick',[])  %删除当前图y轴刻度;

function open_image(~,~)  %定义打开文件函数

global GUI file path

[file,path] = uigetfile; %返回名称和路径

axes(GUI.B);

imshow(fullfile(path,file));

end

function switch_image(~,~) %定义图片转换函数

global GUI file path gray

image=imread(fullfile(path,file));

g_ray=rgb2gray(image);%将rgb色彩转换为灰度图

[r,c]=size(g_ray);

gray=imresize(g_ray,[315,315*c/r]);

[R,C]=size(gray);

axes(GUI.A);

imshow(gray);

function save_image(~,~)  %定义图片保存函数

global gray

[R,C]=size(gray);

char='$W&@E#8}]=+;;^^,,..  ';

len=length(char);

for i=1:R

   for j=1:C

   str(i,j)=char(floor(gray(i,j)/len)+1);

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OTZwcCVXakWdAVatklRlH-3g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券