在MATLAB中将char输出转换为图像

时间:2017-03-05 05:30:00

标签: matlab

有没有办法将matlab文本输出转换为图像文件?

例如,如果我有这样的输出:

17    24     1     8    15
23     5     7    14    16
 4     6    13    20    22
10    12    19    21     3
11    18    25     2     9

我可以将其转换为图片吗?就像拍摄屏幕快照一样 这个矩阵区域?

感谢。

注意:结果需要像文本输出一样对齐。 我知道如何使用不同的字体对齐。我在寻找一个 对齐数字的另一种方法。我只是在问这种可能性 拍摄快照效果。

2 个答案:

答案 0 :(得分:2)

您可以使用msgbox功能在figure中显示矩阵;矩阵必须用functino num2str转换为字符串,然后你必须:

  • 删除确定按钮:
    • 使用findobj函数获取按钮的handle
    • 使用delete功能
    • 删除它
  • 将消息框图HandleVisibility设置为on(默认设置为callback
  • 使用函数print将消息框图打印为图像

这是实施:

% Create the message box
x=msgbox(num2str(a),'Dump of matrix a')
% Set the message box figure HandleVisibility to on
x.HandleVisibility='on'
% Find the handle of the OK pushbutton
hp=findobj(x,'style','pushbutton')
% Delete the OK pushbutton
delete(hp)
% Print the figure
print -djpeg99 image_of_a_matrix

编辑以回答有关文字的对齐的注释

在文本框中表示数字表示为字符串;即使在生成字符串时您正确对齐数字,字符串的表示也取决于所选字体。

如果您使用Monospaced font,例如Courier,Courier New,Lucida Console,您可以获得dsesired alignment。

相反,如果您使用比例字体,您将失去对齐,因为不同的字符占据不同的水平空间量。

关于上面提出的代码,您可以这样设置 Monospaced字体(例如 Courier ):

% Create the message box
x=msgbox(num2str(a),'Dump of matrix a')
% Set the message box figure HandleVisibility to on
x.HandleVisibility='on'
% Find the handle of the OK pushbutton
hp=findobj(x,'style','pushbutton')
% Delete the OK pushbutton
delete(hp)
% Get the handle of the text item
txt_h=x.Children.Children
% Change the text font
txt_h.FontName='Courier'
txt_h.FontWeight='bold'
% Print the figure
print -djpeg99 image_of_a_matrix_1

这是比例字体

的图片

enter image description here

这是带有等宽字体的图片:

enter image description here

希望这有帮助,

Qapla'

答案 1 :(得分:1)

您可以使用insertText功能将文字插入图像。

这是我的代码示例:

A = [17    24     1     8    15
     23     5     7    14    16
      4     6    13    20    22
     10    12    19    21     3
     11    18    25     2     9];

[n_rows, n_cols] = size(A);

%Set background color to [240, 240, 240] (light gray).
I = zeros(n_rows*24+12, n_cols*10*5+8, 3, 'uint8') + 240; %Background color

text_str = cell(n_rows, 1); 
box_color = zeros(n_rows, 3) + 240; %Set box color to same as background color
text_color = repmat([125, 39, 39], n_rows, 1); %Set text color to brown.

%Fill rows of A into cell array text_str
for i = 1:n_rows
    text_str{i} = sprintf('%5d', A(i, :));
end

%Set position of each of the rows.
pos_x = zeros(1, n_rows) + 4;
pos_y = (0:n_rows-1)*24 + 6;
position = [pos_x', pos_y'];

%Insert text into image I.
I = insertText(I, position, text_str, 'FontSize', 14, 'BoxColor', box_color, 'TextColor', text_color,...
               'Font', 'Courier New Bold', 'BoxOpacity', 1);

figure;imshow(I);

结果:
enter image description here

使用不同字体的对齐文字:

应用我的解决方案来对齐没有固定宽度的文本,每个数字需要不同的坐标(总共25个协调和25个字符串)。

以下解决方案使用Arial字体:

A = [17    24     1     8    15
     23     5     7    14    16
      4     6    13    20    22
     10    12    19    21     3
     11    18    25     2     9];

[n_rows, n_cols] = size(A);
n_elms = numel(A);

%Set background color to [240, 240, 240] (light gray).
I = zeros(n_rows*24+12, n_cols*10*5+8, 3, 'uint8') + 240; %Background color

text_str = cell(n_elms, 1);
box_color = zeros(n_elms, 3) + 240; %Set box color to same as background color
text_color = repmat([125, 39, 39], n_elms, 1); %Set text color to brown.

%Fill rows and columns of A into cell array text_str
counter = 1;
for y = 1:n_rows
    for x = 1:n_cols
        text_str{counter} = sprintf('%5d', A(y, x));
        counter = counter + 1;
    end
end

%Set position of each of the rows and columns.
[pos_x, pos_y] = ndgrid(0:n_cols-1, 0:n_rows-1);
pos_x = pos_x(:)*10*5 + 4;
pos_y = pos_y(:)*24 + 6;
position = [pos_x, pos_y];

%Insert text into image I.
I = insertText(I, position, text_str, 'FontSize', 14, 'BoxColor', box_color, 'TextColor', text_color,...
               'Font', 'Arial Bold', 'AnchorPoint','RightTop', 'BoxOpacity', 1);

figure;imshow(I);

结果:
enter image description here